Как подавить предупреждение о том, что "сопрограмма никогда не ждали"? - PullRequest
2 голосов
/ 27 мая 2020

Все результаты поиска по запросу «сопрограмма никогда не ожидалась» предназначены для людей, которые либо пытались запустить и забыть, либо действительно забыли дождаться. Это не мой случай.

Я хочу использовать сопрограмму так же, как я часто использую генераторы: я создаю ее здесь, пока у меня есть все переменные под рукой, но я еще не уверен, ' Мне когда-нибудь понадобится это, чтобы запустить. Что-то вроде:

options = {
   'a': async_func_1(..., ...),
   'b': async_func_2(),
   'c': async_func_3(...),
}

и в другом месте:

appropriate_option = figure_the_option_out(...)
result = await options[appropriate_option]

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Вы можете подавить предупреждения, используя флаг -W в Python.

python -W ignore my_script.py
0 голосов
/ 01 июня 2020

Я до сих пор не нашел ничего, что можно было бы сделать при инициализации, но я нашел решение, которое можно сделать после того, как ожидаются все сопрограммы.

for coroutine in options.values():
    coroutine.close()

Эта функция close() будет работать на всех сопрограммы, ожидаемые или нет.

0 голосов
/ 27 мая 2020

Создание сопрограммы не требует больших затрат, но вам все равно нужно предупреждение, чтобы избежать многих проблем, связанных с асинхронностью:

import asyncio


async def main():
    # many code
    asyncio.sleep(1)  # Oops! I forgot to await, but warning will help me to notice that
    # many code


asyncio.run(main())

В отличие от генераторов, asyncio полностью основан на предположении, что после создания объект коротина, который вы будете ждать его.

Другими словами, имея дело с asyncio, старайтесь следовать такому принципу: создавайте объект сопрограммы только прямо перед тем, как вы захотите начать его выполнение.

Предлагаемое решение you by @jdehesa, я считаю, это лучший подход в вашем случае.

...