Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.Future

задачи

Низкоуровневый объект «результат появится позже»: его можно ждать через await, а значение кладут set_result() или set_exception(). На нём построена asyncio.Task.

Синтаксис

fut = loop.create_future(); fut.set_result(value); value = await fut

Это не concurrent.futures.Future: тот живёт в потоках и его не ждут через await, а asyncio.Future не потокобезопасен и привязан к циклу. Результат кладётся ровно один раз — второй set_result() или result() у незавершённого future дают InvalidStateError. Создавать его лучше loop.create_future(), а в прикладном коде он почти не нужен: для работы в фоне есть create_task(), для сигнала между задачами — asyncio.Event.

Примеры

import asyncio
async def main():
    loop = asyncio.get_running_loop()
    fut = loop.create_future()
    loop.call_later(0.01, fut.set_result, 42)  # кто-то положит результат позже
    print(await fut)  # → 42
    try:
        fut.set_result(43)
    except asyncio.InvalidStateError:
        print('результат уже есть')  # → результат уже есть
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности