Python Scheduler vs loop + sleep

时间:2017-02-14 01:34:34

标签: python sleep scheduler

以下是:

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循环+睡眠:

from time import sleep

while True:
    print 'hello'
    sleep(3)

sched和loop + sleep之间的区别是什么,当系统时间改变时sched会停止?

3 个答案:

答案 0 :(得分:3)

两者之间的区别在于调度程序比loop + sleep更加pythonic有两个原因:优雅和模块化。

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

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

答案 1 :(得分:0)

知道python sched是使用系统时间进行下一次迭代。 睡眠使用 cpu time clock 进行下一次迭代。

答案 2 :(得分: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照顾后)运行下一个任务其中,除非在此期间收到一些信号,但您的下一个预定任务时间将被转移。我相信下一个执行时间不会是你通常所期望的。