задний план
Мы часто используем следующую структуру в асинхронной программе 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_loop
asyncio.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)