[Python] Использование нескольких циклов обработки событий в программе на Python

Python

задний план

Мы часто используем следующую структуру в асинхронной программе Python.

import asyncio
async def doAsync():
    await asyncio.sleep(0)
    #...
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(doAsync())
    loop.close()

Это, конечно, очень хорошо, но при использовании цикла программа выдаст исключение.RuntimeError: Event loop is closed, это понятно, идеальная программа должна еще и решать различные задачи асинхронного ввода-вывода во временной петле.
Но в терминальной среде, такой как Ipython, если вы хотите попрактиковаться в написании асинхронных программ на Python, было бы слишком сложно перезапускать терминал каждый раз, поэтому вам нужно изучить, есть ли лучшее решение.

решение

мы можем использоватьasyncio.new_event_loopфункция для создания нового цикла событий и использованияasyncio.set_event_loopasyncio.get_event_loop

import asyncio
async def doAsync():
    await asyncio.sleep(0)
    #...
def runEventLoop()
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(doAsync())
    loop.close()
if __name__ == "__main__":
    oldloop = asyncio.get_event_loop()
    runEventLoop()
    runEventLoop()
    asyncio.set_event_loop(oldloop)