Асинхронный код Python из синхронного приложения
Что такое асинхронный код и зачем он вам может понадобиться я рассказывал в статье Несинхронный Python.
Иногда, например при экспериментах в REPL или отладке у нас возникает необходимость запускать асинхронный код из синхронных приложений Python.
Раньше это было довольно громоздко
import asyncio
async def main():
print('Hello World!')
if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()
Hello World!
С выходом Python 3.7 появился упрощенный способ запуска без явного создания цикла - функция asyncio.run
import asyncio
async def main():
print('Hello World!')
if __name__ == '__main__':
asyncio.run(main())
Hello World!
А Python 3.8 позволяет нам сразу запустить REPL в асинхронном режиме (python -m asyncio
).
Если приведенный выше код в файле sync_async.py то в Python 3.8 можно:
python -m asyncio
>>> import sync_async
>>> await sync_async.main()
Hello World!