Vocacióntime.sleep()es la forma más rápida de pausar el código Python durante un número determinado de segundos. Para código asincrónico, useasyncio.sleep(), y para subprocesos o GUI, prefiera esperas sin bloqueo para que su aplicación siga respondiendo.
Opción 1: usar time.sleep() en código sincrónico
Paso 1:Importe el módulo de tiempo.
import timePaso 2:Pausar la ejecución llamandotime.sleep(seconds).
Lectura recomendada:Utilice este truco para pausar permanentemente las actualizaciones de Windows
print("Starting...")
time.sleep(2) # sleep for 2 seconds
print("Done.")Paso 3:Pase un flotador a dormir para retrasos de menos de un segundo.
time.sleep(0.1) # 100 millisecondsPaso 4:Inserte períodos de suspensión dentro de bucles para limitar la velocidad del trabajo, como sondeos o llamadas API.
for _ in range(5):
print("Tick")
time.sleep(1)Paso 5:Evite llamartime.sleep()en el hilo principal de una GUI o dentro de un bucle de eventos asíncrono; Utilice las siguientes opciones para evitar la congelación.
Opción 2: usar asyncio.sleep() en funciones asíncronas
Paso 1:Definir una función asíncrona que esperaasyncio.sleep()en lugar de bloquear.
import asyncio
async def work():
print("Hello ...")
await asyncio.sleep(1)
print("... world!")Paso 2:Ejecute la corrutina conasyncio.run()por lo que el bucle de eventos sigue respondiendo mientras espera.
asyncio.run(work())Paso 3:Programe varias tareas para que esperen simultáneamente para obtener un mejor rendimiento.
import asyncio
async def step(name, delay):
await asyncio.sleep(delay)
print(f"{name} done")
async def main():
t1 = asyncio.create_task(step("A", 1))
t2 = asyncio.create_task(step("B", 2))
t3 = asyncio.create_task(step("C", 3))
await t1
await t2
await t3
asyncio.run(main())Opción 3: use Event.wait() para retrasos de subprocesos de respuesta
Con los subprocesos, esperar un evento hace que el cierre sea inmediato y evita esperar a que finalice el bloqueo. Ver objetos de eventos en la documentación.
Paso 1:Crear unthreading.Event()que los subprocesos de trabajo puedan esperar con un tiempo de espera.
import threading
import time
stop = threading.Event()Paso 2:En cada trabajador, reemplacetime.sleep()constop.wait(timeout)para que el hilo pueda salir inmediatamente cuando se le indique.
def worker():
while not stop.is_set():
print("working...")
# Wait up to 1s, but return early if stop is set
stop.wait(1)Paso 3:Inicie el hilo de trabajo y configure el evento para detenerlo limpiamente.
t = threading.Thread(target=worker, name="worker-1")
t.start()
time.sleep(3)
stop.set()
t.join()Opción 4: programar retrasos en Tkinter sin congelar la interfaz de usuario
En Tkinter, usa el widgetafter(ms, callback)método para ejecutar el código más tarde sin bloquear el bucle de eventos. Los métodos se enumeran en la documentación de Tkinter.
Paso 1:Cree la ventana raíz y cualquier interfaz de usuario que necesite.
import tkinter as tk
root = tk.Tk()
root.geometry("300x150")Paso 2:Programe una devolución de llamada conroot.after(delay_ms, func)en lugar de usartime.sleep().
def delayed():
print("Ran after 2 seconds")
root.after(2000, delayed)Paso 3:Inicie el bucle de eventos para que la interfaz de usuario permanezca interactiva mientras espera.
root.mainloop()Consejos rápidos
time.sleep()bloquea sólo el hilo actual; otros hilos continúan ejecutándose.- Utilice flotadores durante fracciones de segundo, por ejemplo
time.sleep(0.25). - Preferir
asyncio.sleep()dentro del código asíncrono yEvent.wait()en servicios roscados para apagados rápidos. - En aplicaciones GUI, programe el trabajo con temporizadores (por ejemplo, Tkinter
after) para evitar ventanas congeladas.
Elija la primitiva de suspensión que coincida con su tiempo de ejecución: síncrona, asíncrona, basada en subprocesos o GUI. Obtendrá el retraso que necesita sin bloquear las partes de su aplicación que deben seguir respondiendo.










