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

时间:2019-11-05 14:44:10

标签: python loops

我有一个遍历列表元素的脚本。每个元素用于查询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

5 个答案:

答案 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作业,以每天一次运行您的代码