python - 并行网络请求:比较不同的方法
问题描述
我想一次请求 100 个网址,目前正在这样做:
responses = list(PoolExecutor(max_workers=NUM_PARALLEL).map(
lambda xml: requests.post(URL, headers=HEADERS, data={'message': xml}),
xmls))
关于这个的几个问题:
- 是
list
“评估”实际生成器对象/表达式的最佳方法吗?除非我这样做,否则list
我只会得到类似的东西:<generator object Executor.map.<locals>.result_iterator at 0x10ecf9888>
- 是
PoolExecutor
在python3中经常用来做并行网络请求,还是有其他更可取的方法? - 和
PoolExecutor
之间有什么区别?AsyncIO
concurrent.futures
解决方案
list 是“评估”实际生成器对象/表达式的最佳方法吗?除非我列出我只会得到类似的东西: .result_iterator at 0x10ecf9888>
我认为Stack Overflow中有一个具体的答案可以解决您的问题。
python3中是否经常使用PoolExecutor做并行网络请求,还是有其他更可取的方法?
是的,还有其他方法,您可以在 StackOverflow 中找到至少一个问题,给出不同的示例。在该问题的答案中,只有一个人在使用concurrent.futures.ThreadPoolExecutor
,这是您最接近PoolExecutor
那里的人。
PoolExector、AsyncIO 和 concurrent.futures 做这样的事情有什么区别?
这个问题的答案可以在《在 Python 中使用 Asyncio》一书的第 3 章 Asyncio 演练中找到。更准确地说,AsyncIO 提供的 API 与 concurrent.futures 包中的 API 非常相似。这个包提供了一个ThreadPoolExecutor
和一个ProcessPoolExecutor
。默认是基于线程的,但可以使用基于线程或基于池的执行器。
推荐阅读
- ansible - status_code 的状态码范围
- mysql - 如何从mysql数据库中搜索特定关键字
- z3 - 使用 Z3 库复制反编译的 C 代码
- django - 使用 django 在一个打开的选项卡中注销时自动在所有选项卡中注销
- ios - 在 iOS 上将 SwiftUI 视图转换为 PDF
- node.js - 角度的木偶 - 打印pdf
- c# - 当文件由于 TFS 为只读时,在 Windows 上从 Visual Studio 2019 运行 Docker 会导致 /app/appsettings.json 出现 UnauthorizedAccessException
- javascript - 使用纯 JavaScript 应用 Google recaptcha V3
- javascript - 使用javascript的数组中第一个丢失的正整数?
- python - 图和数据不匹配