我想从python coroutine中使用ThreadPoolExecutor,将一些阻塞网络调用委托给单独的线程。然而,运行下面的代码:等待执行者的未来:未来不能用于'等待'表达式
from concurrent.futures import ThreadPoolExecutor
import asyncio
def work():
# do some blocking io
pass
async def main():
executor = ThreadPoolExecutor()
await executor.submit(work)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
原因错误:
TypeError: object Future can't be used in 'await' expression
是不是Future
对象awaitable?为什么说他们不是?
如何才能await
a Future
对象由executor.submit
返回?
的Python 3.5.0
编辑
使用executor.submit
是不是我的决定。这由几个库在内部使用,如requests-futures
。我正在寻找一种与协程中的模块进行交互的方法。
我不知道为什么downvote。这当然有效。不过,我更感兴趣的是*为什么而不是*如何*。另外,我使用了期货请求库,它使用内部提交。 –
简单*为什么*是'concurrent.futures.Future'不等待。你正在考虑'asyncio.Future'。 –
好的,所以我们有不同的类型称为未来。这些类型之间是否存在转换? –