我有一个遍历列表元素的脚本。每个元素用于查询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
答案 0 :(得分:2)
time.sleep(86400)
提出了问题,也使您的CPU一无所有。如果在这86400秒内发生了某些情况,脚本崩溃了,则没有任何东西可以重启它。
更好的选择是将当前页面/块保存在某个位置(原始文本文件,json,DB并不重要),然后在发出下一个请求之前将其加载。
然后,您可以将脚本放入操作系统级别/托管任务计划程序(例如,用于Unix的cron或用于Windows的Task Scheduler)并每天运行。
答案 1 :(得分:0)
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
答案 2 :(得分:0)
我将通过创建一个脚本来解决此问题,该脚本在运行时将获得下一个500,然后终止。您可能需要按顺序输出文本文件来存储您要执行的操作。
然后我将安排此脚本使用Windows Task Scheduler(在Windows上)每24小时运行一次
这意味着您没有正在运行的进程无所事事。
sleep()
只能用于较小的时间间隔。
答案 3 :(得分:0)
我认为您可以将此代码作为python脚本编写并在批处理文件中执行。
捕获此批处理文件并将其安排到任务管理器中,例如每天2:00 pm运行...
通常我有一个运行我的机器人和我需要自动执行的操作的python脚本服务器。
答案 4 :(得分:-1)
一个带有睡眠的if else语句可能很简单。但是效率不高,因为该过程仍然有效,并且在86400秒内什么也不做。
您可以考虑创建一个cron作业,以每天一次运行您的代码