Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in das sched-Modul der Python-Standardbibliothek

Einführung in das sched-Modul der Python-Standardbibliothek

零下一度
零下一度Original
2017-07-20 18:06:391942Durchsuche

Veranstaltungsplanung

 schedDer Modulinhalt ist sehr einfach und definiert nur eine Klasse. Es wird als allgemeines Ereignisplanungsmodul verwendet.

 class sched.scheduler(timefunc, delayfunc)Diese Klasse definiert eine allgemeine Schnittstelle zum Planen von Ereignissen. Sie erfordert die Übergabe von zwei externen Parametern. timefunc ist eine Funktion, die eine Zeittypnummer ohne Parameter zurückgibt (üblicherweise im Zeitmodul verwendet). ) time), delayfunc sollte eine Funktion sein, für deren Aufruf ein Parameter erforderlich ist, die mit der Ausgabe von timefunc kompatibel ist und Funktionen zum Verzögern mehrerer Zeiteinheiten (häufig verwendet, z. B. Ruhezustand des Zeitmoduls) aufweist.

Das Folgende ist ein Beispiel:

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

Das Ausgabeergebnis, das Sie sehen, ist, dass das erste Ereignis alle 5 Sekunden und das zweite Ereignis alle 10 Sekunden ausgeführt wird:

1499259731.99From print_time 1499259736.99From print_time 1499259741.991499259741.99

In Multithread-Szenarien kommt es zu Thread-Sicherheitsproblemen und die Funktion run() blockiert den Hauptthread. Die offizielle Empfehlung lautet, stattdessen die Klasse threading.Timer zu verwenden:

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

Scheduler-Objektmethoden

Das Scheduler-Objekt verfügt über die folgenden Methoden oder Attribute:

  • Scheduler. Enterabs(Zeit, Priorität, Aktion, Argument)

Um ein Ereignis hinzuzufügen, sollte der Parameter time ein Wert sein, der mit dem Rückgabewert von Funktion, die an den Konstruktortyp übergeben wird. Gleichzeitig eintreffende Ereignisse werden in der Reihenfolge timefunc ausgeführt. priority

Das Ausführungsereignis ist eigentlich die Ausführung von

. Das Argument muss eine Sequenz sein, die action(argument)-Parameter enthält. action

Der Rückgabewert ist ein Ereignis, mit dem das Ereignis später abgebrochen werden kann (siehe

). cancel()

  • scheduler.enter(delay, priority, action, argument)

Planen eines Ereignisses zur Verzögerung von delay Zeiteinheiten. Mit Ausnahme der Zeit sind andere Parameter, Bedeutungen und Rückgabewerte dieselben wie die Werte von enterabs(). Tatsächlich wird das interne enterabs von enter aufgerufen.

  • scheduler.cancel(event)

Ereignisse aus der Warteschlange löschen. Wenn sich das Ereignis derzeit nicht in der Warteschlange befindet, führt diese Methode ein ValueError aus.

  • scheduler.empty()

Bestimmen Sie, ob die Warteschlange leer ist.

  • scheduler.run()

Alle geplanten Ereignisse ausführen. Diese Funktion wartet (unter Verwendung der an den Konstruktor übergebenen Funktion delayfunc()) und führt dann Ereignisse aus, bis keine weiteren geplanten Ereignisse mehr vorhanden sind.

Jedes action oder delayfunc kann eine Ausnahme auslösen. In beiden Fällen behält der Scheduler einen konsistenten Zustand bei und gibt Ausnahmen weiter. Wenn durch action eine Ausnahme verursacht wird, wird die Ausführung von run() nicht fortgesetzt.

  • scheduler.queue

Schreibgeschütztes Attribut, gibt eine Liste bevorstehender Ereignisse zurück (sortiert nach Ankunftsereignis). Jedes Ereignis besteht aus time, priority, action, argument namedtuple .

Das obige ist der detaillierte Inhalt vonEinführung in das sched-Modul der Python-Standardbibliothek. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn