PYTHON:如何在预定义的时间执行指令集

时间:2012-02-26 21:25:29

标签: python time

我有一套说明,比如{I},我想执行此套{I} 在预定义的时间,例如每分钟。 我不是问如何在连续执行之间插入1分钟的延迟 集合{I},我想每分钟开始{I}指令,与执行{I}的时间无关。

如果我理解以下代码


import time

while True:
   {I}
   time.sleep(60)

只会在{I}执行结束和后续执行之间插入60秒的延迟。这是真的吗?相反,我希望{I}每分钟开始一组指令(例如上午9点,上午9点01分,上午9点02分等)。

是否有可能在python中执行这样的任务,或者最好用{I}编写一个我每分钟执行一次的脚本,例如,用Crontab? 提前谢谢

5 个答案:

答案 0 :(得分:2)

看起来signal.alarmsignal.signal(signal.SIGALRM, handler)可以为您提供帮助。

答案 1 :(得分:2)

如果你不需要比一分钟更精细的分辨率,cron将是最简单的选择。否则你最终会重写这样的东西。

如果您需要的间隔时间不到一分钟,您可以考虑glib库中的“超时”。它有Python绑定。然后,超时应该可以在单独的进程中启动任务。

答案 2 :(得分:2)

APScheduler这样的东西可能会满足您的需求。 我相信还有其他类似的套餐。

答案 3 :(得分:0)

有可能,您必须为每个要同时运行的指令实例化单独的线程,并且只需在延迟的while循环中调度它们。

答案 4 :(得分:0)

您可以使用threading.Timer每秒生成一个线程:

import threading
import time

def do_stuff(count):
    print(count)
    if c < 10: # Let's build in some way to quit
        t = threading.Timer(1.0, do_stuff, args=[count+1])
        t.start()

t = threading.Timer(0.0, do_stuff, args=[0])
t.start()
t.join()

使用sched模块是另一种可能性,但请注意sched.scheduler.run方法阻止主进程,直到事件队列为空。 (因此,如果do_stuff函数花费的时间超过一秒,则下一个事件将无法按时运行。)如果您想要非阻塞事件,请使用threading.Timer