2017-02-14 1 views
3

die folgende ist:Python Scheduler vs Schleife + Schlaf

Python Sched:

from time import time, sleep 
from sched import scheduler 

def daemon(local_handler): 
    print 'hi' 
    local_handler.enter(3, 1, daemon, (local_handler,)) 

if __name__ == '__main__': 
    handler = scheduler(time, sleep) 
    handler.enter(0, 1, daemon, (handler,)) 
    handler.run() 

Python-Schleife + Schlaf:

from time import sleep 

while True: 
    print 'hello' 
    sleep(3) 

Was ist der Unterschied zwischen Sched und loop + sleep, und sched stoppt, wenn die Systemzeit geändert wird?

Antwort

2

Der Unterschied zwischen den beiden ist, dass Scheduler aus zwei Gründen pythonischer als Loop + Sleep ist: Eleganz und Modularität.

Lange Schleifen werden leicht schwer lesbar und erfordern viel mehr Code, um darin geschrieben zu werden. Bei einem Scheduler kann jedoch eine bestimmte Funktion mit einer Verzögerung aufgerufen werden, die den gesamten darin enthaltenen Code enthält. Dies macht Code viel lesbarer und ermöglicht es, Code in Klassen und Module zu verschieben, die innerhalb der Hauptschleife aufgerufen werden.

Python weiß, was die aktuelle Zeit ist, indem es das lokale System überprüft. Wenn die Zeit des lokalen Systems geändert wird, wirkt sich dies auf ein gerade ausgeführtes Programm oder Skript aus.

0

Da der Python sched verwendet wird, verwenden Sie Systemzeit für nächste Iteration. Der Schlaf ist verwenden CPU-Zeituhr für die nächste Iteration.

0

Ein großer Unterschied ist, dass die Verzögerung zwischen mehreren Aufgaben nach Bedarf berechnet wird. Das heißt, Ihre Schleife nehmen:

  • Zeit, es zu print("hello") braucht oder die Aufgabe tun, die Sie
  • Zeit es braucht, um sleep(3)

tun müssen, während, wenn Sie die Bestellung in Ihrem Scheduler ändern zu:

local_handler.enter(3, 1, daemon, (local_handler,)) 
do_the_task 

wird die nächste Aufgabe läuft entweder nach 3 Sekunden werden oder unmittelbar nach do_the_task wenn es länger gedauert als 3 Sekunden.

Also die Entscheidung kommt wirklich auf: Willst du deine Aufgabe jedes X Zeiteinheiten oder mit X Zeiteinheiten Platz zwischen den Ausführungen ausgeführt werden.

Angenommen, Sie verwenden die typischen (time, sleep) Parameter, wenn die Systemzeit geändert wird, erhalten Sie die nächste Aufgabe nach Ablauf der erwarteten Zeit (sleep kümmert sich darum, es sei denn, einige Signale wurden in der Zwischenzeit empfangen), aber Ihre nächste geplante Aufgabe wird verschoben. Ich glaube, dass die nächste Ausführungszeit nicht das ist, was Sie normalerweise erwarten würden.