sched
Le contenu du module est très simple, une seule classe est définie. Il est utilisé comme module général de planification d’événements.
class sched.scheduler(timefunc, delayfunc)
Cette classe définit une interface générale pour planifier des événements. Elle nécessite la transmission de deux paramètres externes. timefunc
est une fonction qui renvoie un numéro de type heure sans paramètres (couramment utilisé dans le module time). ) time), delayfunc
devrait être une fonction qui nécessite l'appel d'un paramètre, est compatible avec la sortie de timefunc et fonctionne pour retarder plusieurs unités de temps (couramment utilisées comme la mise en veille du module de temps).
Voici un exemple :
import sched, time s = sched.scheduler(time.time, time.sleep) # 生成调度器def print_time():print "From print_time", time.time()def print_some_times():print time.time() s.enter(5, 1, print_time, ()) # 加入调度事件# 四个参数分别是:# 间隔事件(具体值决定与delayfunc, 这里为秒);# 优先级(两个事件在同一时间到达的情况);# 触发的函数;# 函数参数;s.enter(10, 1, print_time, ())# 运行s.run()print time.time()if __name__ == '__main__': print_some_times()
Le résultat de sortie que vous voyez est que le premier événement est exécuté toutes les 5 secondes et le deuxième événement est exécuté toutes les 10 secondes :
1499259731.99From print_time 1499259736.99From print_time 1499259741.991499259741.99
Dans les scénarios multithread, il y aura des problèmes de sécurité des threads et la fonction run() bloquera le thread principal. La recommandation officielle est d'utiliser la classe threading.Timer
à la place :
import timefrom threading import Timerdef print_time():print "From print_time", time.time()def print_some_times():print time.time() Timer(5, print_time, ()).start() Timer(10, print_time, ()).start() time.sleep(11) # 阻塞主线程,等待调度程序执行完毕,再执行后面内容print time.time()if __name__ == '__main__': print_some_times()
L'objet planificateur possède les méthodes ou attributs suivants :
scheduler. enterabs(time, priorité, action, argument)
Pour ajouter un événement, le paramètre time
doit être une valeur compatible avec la valeur de retour du timefunc
fonction passée au type constructeur. Les événements arrivant en même temps seront exécutés dans l'ordre priority
.
L'événement d'exécution est en fait l'exécution de action(argument)
. L'argument doit être une séquence contenant des paramètres action
.
La valeur de retour est un événement, qui peut être utilisé pour annuler l'événement ultérieurement (voir cancel()
).
scheduler.enter(delay, priorité, action, argument)
Planification d'un événement pour retarder delay
unités de temps. À l'exception du temps, les autres paramètres, significations et valeurs de retour sont les mêmes que les valeurs de enterabs()
. En fait, le enterabs
interne sert à être appelé par enter
.
scheduler.cancel(event)
Supprimer les événements de la file d'attente. Si l'événement n'est pas actuellement dans la file d'attente, cette méthode exécutera un ValueError
.
scheduler.empty()
Déterminez si la file d'attente est vide.
scheduler.run()
Exécutez tous les événements programmés. Cette fonction attendra (en utilisant la fonction delayfunc()
passée au constructeur) puis exécutera les événements jusqu'à ce qu'il n'y ait plus d'événements planifiés.
N'importe quel action
ou delayfunc
peut déclencher une exception. Dans les deux cas, le planificateur maintiendra un état cohérent et propagera les exceptions. Si une exception est provoquée par action
, l'exécution de run()
ne continuera pas.
scheduler.queue
Attribut en lecture seule, renvoie une liste des événements à venir (triés par événement d'arrivée), chaque événement est composé de time
, priority
, action
, argument
namedtuple
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!