/ / Python Verstehen des Schedulers - Python, geplante Aufgaben, Scheduler

Python den Scheduler zu verstehen - Python, geplante Aufgaben, Scheduler

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 № 1

Von 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 von threading.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 oder multiprocessing

Ein einzelner Thread kann nicht zwei Dinge gleichzeitig tun, also ... threading ist das absolute Minimum, das Sie verwenden müssen, um nicht zu blockieren.