Maison >développement back-end >Tutoriel Python >Introduction au module sched de la bibliothèque standard Python

Introduction au module sched de la bibliothèque standard Python

零下一度
零下一度original
2017-07-20 18:06:391986parcourir

Planification d'événements

 schedLe 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()

Méthodes de l'objet Scheduler

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn