2012-02-26 65 views
3

我有一组指令,说{I},并且我想在预定义的时间执行这个集{I} ,例如每分钟。 我不是问如何在连续执行 集合{I}之间插入1分钟的延迟,我希望独立于{I}的执行时间每分钟启动一次指令{I}。PYTHON:如何在预定义的时间执行一组指令

如果我inderstand以下代码


import time 

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

将简单地插入的{I}和下面之一的执行的结束之间60秒的延迟。这是真的吗?相反,我希望每一分钟(例如上午9点,上午9点01分,上午9.02点等)开始一组指令{I}。

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

+1

除非你有非常特殊的需求,crontab看起来更简单也更可靠,所以... – delnan 2012-02-26 21:30:57

+0

你问关于Python sched模块吗? http://docs.python.org/library/sched.html – 2012-02-26 21:47:22

+0

你的程序实际上在这些间隔中做了什么? – 2012-02-26 21:49:15

回答

0

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

2

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

如果您需要的时间间隔短于一分钟,则可以考虑glib库中的“超时”。它有Python绑定。那么超时应该可以在单独的过程中开始任务。

2

类似APScheduler可能会满足您的需求。 我确定还有其他类似的软件包。

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

相关问题