Каков питонический способ запуска цикла событий asyncio навсегда?Python

Программы на Python
Ответить
Anonymous
 Каков питонический способ запуска цикла событий asyncio навсегда?

Сообщение Anonymous »

Из документации следует, что рекомендуемый способ запуска асинхронного приложения — использовать asyncio.run(), поэтому мое приложение выглядит так:

Код: Выделить всё

async def async_main():
# Everything here can use asyncio.create_task():
o = ObjectThatMustBeKeptReferenced()
create_tasks_and_register_callbacks(o)

# Wait forever, ugly:
while True:
await asyncio.sleep(10000)

asyncio.run(async_main())
Этот бесконечный цикл в конце async_main() кажется совершенно неправильным. На других языках есть место, где я бы назвал цикл событий вечным. Итак, я попробовал это:

Код: Выделить всё

def main():
loop = asyncio.get_event_loop()

# Everything here can use asyncio.create_task():
o = ObjectThatMustBeKeptReferenced()
create_tasks_and_register_callbacks(o)

# Wait forever, pretty:
loop.run_forever()

main()
Проблема здесь в том, что это завершится с ошибкой типа RuntimeError: нет запуска цикла событий, когда я вызываю asyncio.create_task() внутри своих функций, даже если цикл событий создается и регистрируется в потоке.
Что такое питонический способ, один из способов навсегда заснуть в цикле событий asyncio?>

Подробнее здесь: https://stackoverflow.com/questions/656 ... op-forever
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»