当在协程中使用 asyncio.Future 对象时,如果将其附加到不同的事件循环上,就会出现“Future attached to a different loop”错误。要解决这个问题,可以选择两种方法:
在同一事件循环上创建并使用所有的异步任务 示例代码: import asyncio
async def coroutine(): print("Coroutine started") await asyncio.sleep(1) print("Coroutine ended")
async def main(): loop = asyncio.get_event_loop() await loop.create_task(coroutine())
loop = asyncio.get_event_loop() loop.run_until_complete(main())
在创建非默认事件循环的时候,将其设置为当前的事件循环 示例代码: import asyncio
async def coroutine(): print("Coroutine started") await asyncio.sleep(1) print("Coroutine ended")
async def main(): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) await loop.create_task(coroutine())
loop = asyncio.get_event_loop() loop.run_until_complete(main())