如何加速这个 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 循环的主要内容,如果未能解决你的问题,请参考以下文章