- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试同时发送 HTTP 请求。为此,我使用 concurrent.futures
这是简单的代码:
import requests
from concurrent import futures
data = range(10)
def send_request(item):
requests.get("https://httpbin.org/ip")
print("Request {} complete.".format(item))
executor = futures.ThreadPoolExecutor(max_workers=25)
futures_ = executor.map(send_request, data)
for f in futures.as_completed(futures_):
f.result()
如果我运行它,我可以看到请求是异步发送的,这正是我想要做的。但是,当所有请求完成后,我收到以下错误:
Request 0 complete.
Request 6 complete.
...
Request 7 complete.
Request 9 complete.
Request 3 complete.
Traceback (most recent call last):
File "send_thread.py", line 18, in <module>
for f in futures.as_completed(futures_):
File "/usr/local/Cellar/python3/3.6.4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/_base.py", line 219, in as_completed
with _AcquireFutures(fs):
File "/usr/local/Cellar/python3/3.6.4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/concurrent/futures/_base.py", line 146, in __enter__
future._condition.acquire()
AttributeError: 'NoneType' object has no attribute '_condition'
这是一个非常奇怪的错误。这里 executor.map 似乎有问题。如果我用以下行替换 map ,它会按预期工作。
futures_ = [executor.submit(send_request, x) for x in data]
我错过了什么?试图找到两者之间的差异,但似乎无法理解是什么导致了上述问题。任何意见都将受到高度赞赏。
最佳答案
Executor.map
不会返回 future 列表,而是返回结果生成器,因此:
futures_ = executor.map(send_request, data)
for f in futures.as_completed(futures_):
f.result()
你应该运行:
results = executor.map(send_request, data)
for r in results:
print(r)
关于python - 为什么在所有 futures 完成后与 futures.as_completed 一起使用时,concurrent.futures 执行器映射会抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49466794/
阅读 this answer ,我遇到了 asyncio.tasks.as_completed。我不明白该功能实际上是如何工作的。它被记录为一个非异步例程,按照它们完成的顺序返回 future 。它创
我正在 Python 2.7 模块 multiprocessing 中寻找 as_completed 函数(来自 Python 3 concurrent.futures)的模拟。我目前的解决方案: i
我正在尝试从异步队列中提取任务,并在发生异常时调用给定的错误处理程序。排队项目以字典形式给出(由 enqueue_task 排队),其中包含任务、可能的错误处理程序以及错误处理程序可能需要的任何 ar
我正在学习 python 并发性,并且向我介绍了 future 的概念。我读到 as_completed() 获取可迭代的 futures 并在完成时产生它们。 我想知道它在内部是如何工作的。它是否立
我有一些代码,用于抓取 URL、解析信息,然后使用 SQLAlchemy 将其放入数据库中。我尝试异步执行此操作,同时限制同时请求的最大数量。 这是我的代码: async def get_url(ai
来自 asyncio docs : asyncio.as_completed(aws, *, loop=None, timeout=None) Run awaitable objects in the
我正在努力在Python中使用concurrent.futures。我正在尝试迭代大量 S3 对象。由于帐户、存储桶和对象的数量较多,这可能需要很长时间。比我的 STS 凭证有效的时间长,并且足够长,
所以,基本上,在 Python 3.7 中(据我所知)如果你尝试这样做, import asyncio async def sleep(): asyncio.sleep(1) async de
我正在尝试同时发送 HTTP 请求。为此,我使用 concurrent.futures 这是简单的代码: import requests from concurrent import futures
我在学习concurrent.futures.ThreadPoolExecutor在 Py3.6 中,对于使用之间的区别、优缺点有点困惑 1 future.add_done_callback(call
我是一名优秀的程序员,十分优秀!