Python Glossary English

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Сообщить о неточности