2017-02-14 57 views
3

以下是:Python的调度VS环+睡眠

蟒蛇章附表:

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

蟒蛇环+睡眠:

from time import sleep 

while True: 
    print 'hello' 
    sleep(3) 

有什么区别章附表之间循环+睡眠,并且当系统时间改变时调度将停止?

回答

2

两者之间的区别在于,调度程序比循环+睡眠更加pythonic,原因有两个:优雅性和模块性。

长循环很容易变得难以阅读,并需要更多的代码写入其中。但是,使用调度程序时,可以在延迟上调用特定函数,其中包含所有代码。这使代码更具可读性,并允许将代码移入类和模块以在主循环中调用。

Python通过检查本地系统知道当前时间是什么。如果本地系统的时间发生了变化,那么这会影响当前正在运行的程序或脚本。

0

因为python sched使用系统时间进行下一次迭代。 睡眠使用cpu时钟进行下一次迭代。

0

一个很大的区别是多任务之间的延迟是根据需要计算的。这意味着,你的循环将采取:

  • 时间,它需要print("hello")或做你需要做的
  • 花费的时间sleep(3)

任务而如果你在你的调度更改顺序于:

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

你的下一个任务将在3秒后,或do_the_task后立即运行,如果它超过3花的时间秒。

所以这个决定真的归结为:你是否希望你的任务每X时间单位执行一次,或者执行之间有X个时间单位空间。

假设您使用典型的(time, sleep)参数,如果系统时间发生变化,您将在预计的时间量后执行下一个任务(sleep负责此操作,除非在此期间收到某些信号),但您的下一个计划任务时间将会移动。我相信下一个执行时间不会是你通常所期望的。