我想使用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
对象不是可以等待的吗?为什么上面说他们不是?
我怎样才能await
返回的Future
对象?
Python3.5.0
编辑
使用executor.submit
不是我的决定。这在内部被几个库使用,比如^{
您应该使用^{} :
编辑
^{} 对象不同于^{} 。
asyncio.Future
旨在与事件循环一起使用,并且是可等待的,而前者不是。编辑2
编辑3
由于python 3.5(docs),您可以使用
asyncio.wrap_future(future, *, loop=None)
将concurrent.futures.Future
转换为asyncio.Future
。相关问题 更多 >
编程相关推荐