【发布时间】:2021-07-29 17:40:29
【问题描述】:
我遇到了 python 3.8.5 与 3.7 的问题
给定方法:
import asyncio
import functools
_executor = ThreadPoolExecutor()
async def request_async(*args, **kwargs) -> requests.Response:
loop = asyncio.get_event_loop()
response = await loop.run_in_executor(_executor, functools.partial(requests.request, *args, **kwargs))
return response
还有一个电话:
response = await request_async(protocol, url, headers=headers, *args, **kwargs)
^^ 在 python 3.7 中工作并根据签名返回 Response 尽管在 python 3.8 中返回一个 Future 才能开始工作,但需要第二次等待。
response = await (await request_async(protocol, url, headers=headers, *args, **kwargs))
我希望能提供一些见解,看看哪里以及为什么会发生。
【问题讨论】:
-
您好,我正在尝试重现您的问题,但我遇到了一些麻烦,因为您提供的示例代码无法执行。我想它需要
from concurrent.futures import ThreadPoolExecutor,但你的request_async也引用requests,我一直无法弄清楚那应该是什么。你能编辑你的代码来纠正它吗? -
+1 致@OmnipotentEntity - 例如:你不是在使用等待的aiohttp 请求吗?顺便提一句。为什么不直接使用aiohttp请求?
标签: python python-asyncio python-3.7 python-3.8