Ich habe eine python scheduler
Code zum Drucken Hello
und World!
.
import sched
import time
def x():
print "Hello"
s = sched.scheduler(time.time, time.sleep)
s.enter(10, 1, x, ())
s.run()
print "World!"
Dies wartet auf 10 seconds
und Ausgänge:
Hello
World!
Ich denke, die Aufgabe eines Schedulers ist es, eine Aufgabe zu planen, ohne den aktuellen Prozess zu unterbrechen. Aber hier wird das gesamte Programm in den Ruhezustand versetzt und verhält sich wie der folgende Code:
import time
def x():
print "Hello"
time.sleep(10)
x()
print "World!"
Ich denke, der Scheduler lässt das Programm aufgrund der time.sleep
Parameter in sched.scheduler(time.time, time.sleep)
. Gibt es sowieso etwas, das wie ein Echtzeitplaner funktioniert, ohne dass der Hauptprozess blockiert wird, ohne dass einer verwendet wird? multithreading
oder multiprocessing
?
Antworten:
1 für die Antwort № 1Von die Dokumente:
In Umgebungen mit mehreren Threads kann die
scheduler
Klasse hat Einschränkungen in Bezug aufThread-Sicherheit, Unfähigkeit, eine neue Task vor der aktuell in einem ausgeführten Scheduler ausstehenden einzufügen und den Hauptthread zu halten, bis die Ereigniswarteschlange leer ist. Stattdessen ist der bevorzugte Ansatz die Verwendung vonthreading.Timer
Klasse stattdessen.
from threading import Timer
def x():
print "Hello"
Timer(10, x, ()).start()
print "World!"
ohne den Hauptprozess ohne Verwendung von blockieren
multithreading
odermultiprocessing
Ein einzelner Thread kann nicht zwei Dinge gleichzeitig tun, also ... threading
ist das absolute Minimum, das Sie verwenden müssen, um nicht zu blockieren.