Передача цикла asyncio по аргументу или использование цикла asyncio по умолчанию

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

У вас есть три возможности при написании функции/метода с использованием цикла событий:

  • Пропустить цикл событий asyncio как аргумент
  • Не используйте аргумент для цикла событий и используйте asyncio.get_event_loop()
  • Сделать необязательным для передачи цикла событий в качестве аргумента. Если он не передан, используйте asyncio.get_event_loop()

Кажется, что последний случай используется большую часть времени, но даже в asyncio api использование несовместимо. Поскольку я не отступаю от использования двух отдельных циклов событий, что говорит против использования asyncio.get_event_loop(), где необходимо?

Какой лучший способ пойти?

Ответ 1

Хороший (как в похвале Гвидо ван Россум) сообщение в блоге, обсуждающее это Некоторые мысли о асинхронном дизайне API в мире после асинхронного/ожидающего. С последующим обсуждением от разработчиков ядра python здесь.

TL;DR;

Если вы используете только один цикл событий, это не имеет значения.

Если вы управляете несколькими циклами, и имеют python >= 3.6, это в основном не имеет значения: не используйте аргумент и не используйте asyncio.get_event_loop() там, где это необходимо, это даст вам правильный цикл.