Heim >Backend-Entwicklung >Python-Tutorial >Einführung in das sched-Modul der Python-Standardbibliothek
sched
Der 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()
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 Argument muss eine Sequenz sein, die action(argument)
-Parameter enthält. action
). 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!