Что произойдет, если вы не будете ждать функции asyn c? - PullRequest
0 голосов
/ 29 марта 2020

Если я не использую await для вызова функции asyn c, я верну сопрограмму. В таком случае, что будет с сопрограммой? Должен ли я вручную выполнить сопрограмму? Или эта сопрограмма продолжит работать сама в фоновом режиме?

Использование await

async def work():
    result = await stuff()

Без await

async def work():
     result = stuff()

1 Ответ

2 голосов
/ 29 марта 2020

Из официальных документов:

Обратите внимание, что простой вызов сопрограммы не запланирует ее выполнение:

Это означает, что вы на самом деле не вызывали свою функцию так никто не ждет ничего и ничего не ждет, если вы не поместили await перед вызовом функции.

Вместо этого вы можете запланировать задачу для нее или множество задач, используя asyncio:

import asyncio

async def main():
    loop = asyncio.get_event_loop()
    t1 = loop.create_task(stuff())
    t2 = loop.create_task(stuff())

loop = asyncio.get_event_loop()
loop.run_until_complete(main())

Чтобы узнать больше об этом, я бы порекомендовал прочитать https://docs.python.org/3/library/asyncio-task.html

...