Python 3.4+Асинхронное программированиефункция
asyncio.wrap_future()
связь с потоками
Оборачивает concurrent.futures.Future (из пула потоков или процессов) в asyncio.Future, чтобы его можно было ждать через await.
Синтаксис
fut = asyncio.wrap_future(future, *, loop=None)
await на concurrent.futures.Future напрямую даёт TypeError — это другой класс с блокирующим result(). Обычно обёртку делает за вас loop.run_in_executor(); wrap_future нужна, когда Future пришёл из чужого кода, например из executor.submit(). Отмена обёртки пытается отменить исходный Future, но уже идущую в потоке функцию это не остановит.
Примеры
import asyncio
from concurrent.futures import ThreadPoolExecutor
async def main():
with ThreadPoolExecutor() as pool:
cf = pool.submit(sum, [1, 2, 3])
try:
await cf
except TypeError:
print('напрямую нельзя') # → напрямую нельзя
print(await asyncio.wrap_future(cf)) # → 6
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности