Python:进行6000个API调用

问题描述 投票:0回答:2

我正在编写一个Python脚本来进行6000次api调用,以同步格式完成大约需要20分钟。我正在尝试查看是否可以将处理时间减少到不到一分钟。

下面是我正在采取的步骤

  1. 读取具有SKU(唯一产品标识符)的csv文件
  2. 在我用于for循环的函数中,以SKU结尾构造一个URL
  3. 获取一个响应对象并传递给另一个函数(响应对象具有产品名称和价格)

[就像我之前以同步格式所说的那样,它大约需要20分钟或更长时间,而我尝试使用Threads时,处理时间减少到5分钟,但是线程问题是函数什么都不返回。因此,为了解决线程问题,我使用了队列模块,但是增加了处理时间。

我是python的新手,所以不确定如何减少处理时间,我查看了asyncio,但它非常令人困惑,我什至不确定从哪里开始使用asyncio。

python-3.x asynchronous parallel-processing python-requests python-multithreading
2个回答
0
投票

[您也许可以尝试使用探查器来找出程序在代码中浪费了最多的时间/ cpu周期,如果您担心的话,还可以探查内存。

Python文档对分析器(https://docs.python.org/2/library/profile.html)提出了一些建议,我知道那里还有一些视觉效果更好的GUI界面。


0
投票

所以我在下面的代码中添加了代码,不确定它是否是处理此问题的最佳方法。这将在127秒内返回2750个api调用的响应。

我添加了10个函数,并且正在使用10个线程来调用它们。

with concurrent.futures.ThreadPoolExecutor() as executor:
first = executor.submit(get_stock_info_first)
second = executor.submit(get_stock_info_second)
third = executor.submit(get_stock_info_third)
fourth = executor.submit(get_stock_info_fourth)
fifth = executor.submit(get_stock_info_fifth)
sixth = executor.submit(get_stock_info_sixth)
seventh = executor.submit(get_stock_info_seventh)
eight = executor.submit(get_stock_info_eight)
t9 = executor.submit(get_stock_info_t9)
t10 = executor.submit(get_stock_info_t10)

return_value1 = first.result()
return_value2 = second.result()
return_value3 = third.result()
return_value4 = fourth.result()
return_value5 = fifth.result()
return_value6 = sixth.result()
return_value7 = seventh.result()
return_value8 = eight.result()
return_value9 = t9.result()
return_value10 = t10.result()

我正在尝试查看如何改进此代码。如果有更好的方法,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.