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