我有一套说明,比如{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? 提前谢谢
答案 0 :(得分:2)
看起来signal.alarm
和signal.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
。