sched
— Event scheduler¶
Código fuente: Lib/sched.py
El módulo sched
define una clase que implementa un planificador de eventos de propósito general:
- class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)¶
La clase
scheduler
define una interfaz genérica para planificar eventos. Necesita dos funciones para tratar con el «mundo exterior» — timefunc debe poder llamarse sin argumentos y retornar un número (el «time», en cualquier unidad). La función delayfunc debería ser invocable con un argumento, compatible con la salida de timefunc, y debería retrasar tantas unidades de tiempo. delayfunc también se llamará con el argumento0
después de que se ejecute cada evento para permitir que otros hilos tengan la oportunidad de ejecutarse en aplicaciones multihilo.Distinto en la versión 3.3: Los argumentos timefunc and delayfunc son opcionales.
Distinto en la versión 3.3:
scheduler
La clase se puede usar de forma segura en entornos multihilo.
Ejemplo:
>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
... print("From print_time", time.time(), a)
...
>>> def print_some_times():
... print(time.time())
... s.enter(10, 1, print_time)
... s.enter(5, 2, print_time, argument=('positional',))
... # despite having higher priority, 'keyword' runs after 'positional' as enter() is relative
... s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
... s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
... s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
... s.run()
... print(time.time())
...
>>> print_some_times()
1652342830.3640375
From print_time 1652342830.3642538 second enterabs
From print_time 1652342830.3643398 first enterabs
From print_time 1652342835.3694863 positional
From print_time 1652342835.3696074 keyword
From print_time 1652342840.369612 default
1652342840.3697174
Objetos de Scheduler
¶
scheduler
Las sentencias tienen los siguientes métodos y atributos:
- scheduler.enterabs(time, priority, action, argument=(), kwargs={})¶
Planifica un nuevo evento. El argumento time debe ser un tipo numérico compatible con el valor de retorno de la función timefunc que se pasa al constructor. Los eventos planificados para la misma time se ejecutarán en el orden de su priority. Un número más bajo representa una prioridad más alta.
Ejecutar el evento significa ejecutar
action(*argument, **kwargs)
. argument es una secuencia que contiene los argumentos posicionales para action. kwargs es un diccionario que contiene los argumentos de palabras clave para action.El valor de retorno es un evento que puede usarse para una cancelación posterior del evento (ver
cancel()
).Distinto en la versión 3.3: El argumento argument es opcional.
Distinto en la versión 3.3: Se agregó el argumento kwargs.
- scheduler.enter(delay, priority, action, argument=(), kwargs={})¶
Planifica un evento delay para más unidades de tiempo. Aparte del tiempo relativo, los otros argumentos, el efecto y el valor de retorno son los mismos que para
enterabs()
.Distinto en la versión 3.3: El argumento argument es opcional.
Distinto en la versión 3.3: Se agregó el argumento kwargs.
- scheduler.cancel(event)¶
Elimina el evento de la cola. Si event no es un evento actualmente en la cola, este método lanzará un
ValueError
.
- scheduler.empty()¶
Retorna
True
si la cola de eventos está vacía.
- scheduler.run(blocking=True)¶
Ejecuta todos los eventos planificados. Este método esperará (usando la función delayfunc enviada al constructor) al próximo evento, luego lo ejecutará y así sucesivamente hasta que no haya más eventos planificados.
Si blocking es falso, se ejecutan los eventos planificados que expiran mas pronto (si corresponde) y luego retorna la fecha límite de la próxima llamada programada en el planificador (si corresponde).
action o delayfunc pueden generar una excepción. En cualquier caso, el planificador mantendrá un estado consistente y propagará la excepción. Si action genera una excepción, el evento no se intentará en futuras llamadas a
run()
.Si una secuencia de eventos tarda más en ejecutarse que el tiempo disponible antes del próximo evento, el planificador simplemente se retrasará. No se descartarán eventos; el código de llamada es responsable de cancelar eventos que ya no son oportunos.
Distinto en la versión 3.3: Se agregó el argumento blocking.
- scheduler.queue¶
Atributo de solo lectura que retorna una lista de los próximos eventos en el orden en que se ejecutarán. Cada evento se muestra como un named tuple con los siguientes campos : time, priority, action, argument, kwargs.