如何在Python中重复x分钟的操作?

问题描述:

我有一个程序(temptrack),我需要每x分钟下载x天数据的天气数据。我已经想出了如何使用time.sleep(x*60)每隔x分钟下载一次,但我不知道如何在一定的时间内重复此过程。如何在Python中重复x分钟的操作?

更新: 谢谢大家谁发布的解决方案。 我用“datetime.datetime.now()+ datetime.timedelta(hours = x)”作为最好的答案来标记这个例子,因为我可以理解它是最好的,它看起来好像对我的目的很好。

计算你想要停止做任何事情的时间,并且每次检查时限没有过期。像这样:

finish_time = datetime.datetime.now() + datetime.timedelta(hours=6) 
while datetime.datetime.now() < finish_time: 
    do_something() 
    sleep_for_a_bit() 
+0

这正是我所寻找的,即使我不知道它。非常感谢你。 – ErikT 2010-04-18 16:57:00

也许我误解了你,只是把它放在一个运行足够多次的循环中。例如,2小时,你需要下载24次,每5分钟下载,所以:

for i in range(24): 
    download() 
    sleep(5*60) 

如果你需要它是参数化的,它只是:

from __future__ import division 
from math import ceil 
betweenDLs = 5 # minutes 
totalTime = 2*60 # minutes 
for i in range(int(ceil(totalTime/betweenDLs))): 
    download() 
    sleep(betweenDLs*60) 
+2

这是一个简单的解决方案,但如果执行该函数的时间与执行时间之间的时间大小相似,可能并不完全如此。 – 2010-04-17 21:45:18

+0

谢谢。你的第一个例子效果很好。我只会使用“for i in range(totalTime/frequency)”,这应该很好。我知道它会轮到(因为我使用整数,而不是浮点),但它不一定非常准确。 – ErikT 2010-04-17 21:47:48

+1

尽量避免使用range(),除非你需要一个真正的列表。如果你只需要运行一个使用xrange来代替。这将优化你的代码,因为range()分配了一个完整的列表,而xrange()只是一个迭代器。注意:在python3中只有range()和行为像xrange() – Dacav 2010-04-17 22:22:29

您正在寻找一调度。

检查this thread

+0

不,不是。不过谢谢你。 – ErikT 2010-04-17 21:51:39

可能有点矫枉过正,但对于后台运行的,特别是如果你需要一个GUI,我建议你检查出有QSystemTrayIcon PyQt的路线和QTimer

我只是发现sched在Python标准库。