Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中重复x分钟?_Python_Time_Repeat - Fatal编程技术网

如何在Python中重复x分钟?

如何在Python中重复x分钟?,python,time,repeat,Python,Time,Repeat,我有一个程序(TestRack),我需要在x小时内每x分钟下载一次天气数据。我已经知道如何使用time.sleep(x*60)每隔x分钟下载一次,但我不知道如何在一定时间内重复这个过程 更新: 感谢所有发布解决方案的人。 我用“datetime.datetime.now()+datetime.timedelta(hours=x)”作为最好的答案标记了这个示例,因为我能最好地理解它,而且它似乎对我的目的非常有用。也许我误解了你,但只需将它放在一个循环中运行足够的次数即可。例如,要在2小时内每5分钟

我有一个程序(TestRack),我需要在x小时内每x分钟下载一次天气数据。我已经知道如何使用
time.sleep(x*60)
每隔x分钟下载一次,但我不知道如何在一定时间内重复这个过程

更新: 感谢所有发布解决方案的人。
我用“datetime.datetime.now()+datetime.timedelta(hours=x)”作为最好的答案标记了这个示例,因为我能最好地理解它,而且它似乎对我的目的非常有用。

也许我误解了你,但只需将它放在一个循环中运行足够的次数即可。例如,要在2小时内每5分钟下载一次,您需要下载24次,因此:

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)

您正在寻找一个调度程序


检查。

可能有点过火,但是对于运行后台任务,尤其是如果您需要GUI,我建议您使用和检查PyQt路由。

我刚刚在Python标准库中找到。

计算您想要停止做任何事情的时间,并在每次时间限制未过期时检查。像这样:

finish_time = datetime.datetime.now() + datetime.timedelta(hours=6)
while datetime.datetime.now() < finish_time:
    do_something()
    sleep_for_a_bit()
finish\u time=datetime.datetime.now()+datetime.timedelta(小时=6)
while datetime.datetime.now()
这是一个简单的解决方案,但如果执行函数的时间与执行之间的时间大小相似,则可能不是我们想要的。谢谢。您的第一个示例运行良好。我将只使用“for I in range(totalTime/frequency)”,这应该可以很好地工作。我知道它会四舍五入(因为我使用的是整数,而不是浮点),但它不一定要非常精确。除非你需要一个真正的列表,否则尽量避免使用range()。如果您只需要运行一个用于xrange的。这将优化代码,因为range()分配整个列表,而xrange()只是一个迭代器。注意:在python3中只有range(),其行为类似于xrange(),我会使用select()来实现这一点:pUPDATE:nevermind,使用“for I in range(totalTime/frequency)”似乎效果不太好(这意味着使用它太不准确)。谢谢,我将签出xrange()和select()。这正是我要找的,尽管我不知道。非常感谢你。