在 python 循环期间暂停最有效的方法是什么?



我有一个脚本,它循环遍历列表的元素。每个元素都用于查询API。然而,API有查询限制(24小时内只允许500次查询(。我目前正在通过循环中的一个计数器来管理这一点,该计数器为500个元素的每个"块"重置,并将循环暂停一天。有更好的方法吗?

counter = 0
for query in queries:
if counter < 500:
counter = counter + 1
api = ApiClient(api_key='secretkey')
data = api.get(q=query)
print(data)
safequery = ''.join(e for e in query if e.isalnum())
datafilename = "{} {}.txt".format(safequery,todaysdate)
with open(datafilename, 'w') as outfile:
json.dump(data, outfile)
else:
print('sleepy time')
time.sleep(86400)
counter = 0

time.sleep(86400)在问问题,也让您的CPU无偿工作。如果在这86400秒内发生了什么事情,脚本崩溃,则不会重新启动它

更好的选择是将当前页面/区块保存在某个地方(原始文本文件、json、DB并不重要(,然后在发出下一个请求之前加载它。

然后,您可以将脚本放入操作系统级别/托管任务调度程序(例如,适用于Unix的cron或适用于Windows的任务调度程序(中,并每天运行它。

time.sleep()是一个很好的解决方案,但当您想继续时,也可以让Python请求输入。我知道这很原始。

if counter % 500 == 0: # make the counter start at 1
val = input("nContinue? [y/n]: ")
if val == 'y':
pass # manually unpause the looping, whenever you want
elif val == 'n':
break # interrupt for loop

我将通过创建一个脚本来解决这个问题,该脚本在运行时将获得下一个500,然后终止。您可能希望输出一个文本文件来存储您在此序列中的位置。

然后,我会安排这个脚本每24小时运行一次,使用windows任务调度程序(在windows上(

这意味着你没有让一个进程无所事事地运行。

sleep()

应仅用于小的时间间隔。

我认为您可以将此代码作为python脚本,并在批处理文件中执行。

捕获这个批处理文件并将其安排到任务管理器中,以便每天下午2:00运行,例如。。。

通常我有一个python脚本服务器,它运行我的机器人和我需要自动完成的事情。

带有睡眠的if-else语句可能非常简单;然而,这并不是有效的,因为这个过程在86400秒内仍然有效,什么都不做。

您可以考虑创建一个cron作业,以便每天同时运行一个代码

最新更新