如何加速这个 Python 循环

Posted

技术标签:

【中文标题】如何加速这个 Python 循环【英文标题】:How to Speed Up This Python Loop 【发布时间】:2022-01-21 18:49:10 【问题描述】:
    downloadStart = datetime.now()
while (True):
    requestURL = transactionAPI.format(page = tempPage,limit = 5000)
    response = requests.get(requestURL,headers=headers)
    json_data = json.loads(response.content)
    tempMomosTransactionHistory.extend(json_data["list"])  
    if(datetime.fromtimestamp(json_data["list"][-1]["crtime"]) <  datetime(datetime.today().year,datetime.today().month,datetime.today().day - dateRange)):          
        break                       
    tempPage += 1
downloadEnd = datetime.now()

有什么建议请穿线或类似的东西吗?

在这里输出

下载时间 0:00:02.056010

下载时间 0:00:05.680806

下载时间 0:00:05.447945

【问题讨论】:

【参考方案1】:

你需要从两个方面改进它。

    优化循环内的代码 并行化代码执行

#1 通过查看您的代码,我可以看到一项改进,即。创建 datetime.today 对象而不是做 3 次。进一步检查 transactionAPI 等其他方法优化。

#2: 如果您是多核 CPU 机器,那么您可以通过每页跨越线程来利用机器。参考上面的修改代码。

import threading

def processRequest(tempPage):
    requestURL = transactionAPI.format(page = tempPage,limit = 5000)
    response = requests.get(requestURL,headers=headers)
    json_data = json.loads(response.content)
    tempMomosTransactionHistory.extend(json_data["list"])
    
downloadStart = datetime.now()
while (True):
     #create thread per page
     t1 = threading.Thread(target=processRequest, args=(tempPage, ))
     t1.start()
     #Fetch datetime today object once instaed 3 times
     datetimetoday = datetime()
    if(datetime.fromtimestamp(json_data["list"][-1]["crtime"]) <  datetime(datetimetoday.year,datetimetoday.month,datetimetoday.day - dateRange)):          
        break                       
    tempPage += 1
downloadEnd = datetime.now()

【讨论】:

非常感谢。同时,我每小时更改每个请求的数据下载量。我现在每小时下载并更新一次并检查一下。现在只有排序时间很重要,它的值很小,比如 0.3 秒 :)

以上是关于如何加速这个 Python 循环的主要内容,如果未能解决你的问题,请参考以下文章

如何多线程(多进程)加速while循环(语言-python)?

如何使用嵌套循环加速查询

如何加速这种双 for 循环?

在更新字典时加速嵌套的 Python 循环

如何加速这个用 Python 编写的程序?

如何通过 MPI 加速这个问题