Python 3.12+Асинхронное программированиефункция
asyncio.eager_task_factory()
задачи
Готовая фабрика «жадных» задач: корутина начинает выполняться сразу в create_task, до первого await, а не на следующей итерации цикла.
Синтаксис
loop.set_task_factory(asyncio.eager_task_factory)
Включается loop.set_task_factory(asyncio.eager_task_factory). Если корутина завершилась без единой приостановки, задача сразу done и вовсе не попадает в планировщик — это заметно ускоряет код с кэшами. Но меняется порядок: код до первого await выполняется раньше строки, следующей за create_task, и программы, которые на старый порядок полагались, ломаются. Появилась в 3.12.
Примеры
import asyncio
async def cached():
print('выполняется')
return 42
async def main():
asyncio.get_running_loop().set_task_factory(asyncio.eager_task_factory)
task = asyncio.create_task(cached()) # → выполняется — ещё внутри create_task
print(task.done(), task.result()) # → True 42
asyncio.run(main())
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности