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

2024-10-02 12:24:54 发布

您现在位置: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

Tags: in脚本api元素fordataiftime
3条回答

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

time.sleep(86400)是在问问题,也会让你的CPU白白工作。如果在这86400秒内发生了什么,脚本崩溃了,就不会重新启动它。你知道吗

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

然后,您可以将脚本放入操作系统级/托管任务调度器中(例如,cron for Unix或task scheduler for Windows),并每天运行它。你知道吗

我将通过创建一个脚本来解决这个问题,当运行这个脚本时,它将得到下一个500,然后终止。您可能需要输出一个文本文件来存储您在这个序列中所处的位置。你知道吗

然后,我会使用windows任务调度器(在windows上)将此脚本安排为每24小时运行一次

这意味着您没有一个进程在运行,什么也不做。你知道吗

sleep()

只能用于小时间间隔。你知道吗

相关问题 更多 >

    热门问题