Из обычной синхронной точки входа используйте asyncio.run(coroutine()). Если в том же потоке уже работает event loop, вложенный asyncio.run запускать нельзя.
Как из синхронного кода запустить асинхронную библиотеку без синхронного интерфейса?
Из обычной синхронной точки входа используйте asyncio.run(coroutine()). Если в том же потоке уже работает event loop, вложенный asyncio.run запускать нельзя.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Из обычной синхронной точки входа используйте asyncio.run(coroutine()). Если в том же потоке уже работает event loop, вложенный asyncio.run запускать нельзя.
Для повторных вызовов можно организовать долгоживущий loop с управляемым жизненным циклом. Если он работает в другом потоке, asyncio.run_coroutine_threadsafe передаёт ему корутину и возвращает concurrent Future.
Не блокируйте поток самого loop ожиданием .result() — это создаст deadlock. Клиенты, пулы и сессии должны создаваться и использоваться в совместимом loop; нельзя произвольно переносить их между запусками. Часто правильнее сделать асинхронным вызывающий путь, чем прятать async-библиотеку за блокирующими мостами.