sched
Se puede usar para tareas cronometradas. Lo único que se debe tener en cuenta es que estas tareas se ejecutan en un hilo. Si las tareas anteriores tardan demasiado, las tareas posteriores se retrasarán.
Pero su método de uso sigue siendo muy simple, principalmente encapsula una clasescheduler
import sched
import time
def printName(name):
print(name,"@",time.time())
s = sched.scheduler()
s.enter(5,1,printName,("5 - 1",))
s.enter(5,2,printName,("5 - 2",))
s.enter(10,1,printName,("10 - 1",))
s.run()
Entre ellos, enter
se encuentra s
el evento agregado, cuyos dos primeros parámetros representan el tiempo de retardo y la secuencia de ejecución de la tarea respectivamente; printName
es la función a ejecutar, ("5-1",)
es la lista de parámetros, indicando la primera tarea a ejecutar en los 5s.
El resultado de su ejecución es el siguiente
5 - 1 @ 1649725436.606954
5 - 2 @ 1649725436.6229577
10 - 1 @ 1649725441.6388779
Si se agrega un retraso a la función, las tareas posteriores se retrasarán
def printName(name):
print(name,"@",time.time())
time.sleep(6)
Su salida es
5 - 1 @ 1649725617.7624931
5 - 2 @ 1649725623.7689147
10 - 1 @ 1649725629.7827168
A diferencia enter
de cancel(evt)
sum empty
, el primero puede eliminar un evento y el segundo puede borrar todos los eventos.
Si se thread
usan juntos, el sched
problema de bloqueo se puede resolver.
import sched
import threading
import time
def printNameByThread(name):
threading.Thread(target=printName,args=[name]).start()
s = sched.scheduler()
s.enter(5,1,printNameByThread,("5 - 1",))
s.enter(5,2,printNameByThread,("5 - 2",))
s.enter(10,1,printNameByThread,("10 - 1",))
s.run()
Su salida es
5 - 1 @ 1649725777.2276525
5 - 2 @ 1649725777.2276525
10 - 1 @ 1649725782.2158542
Por lo tanto, con el uso experto thread
de y sched
, puede organizar tareas cronometradas.