在Asyncio程序中,当事件循环中没有挂起的协程或任务时,程序将退出。而在while True循环内,没有挂起的协程或任务,所以程序会提前退出。解决方法是向事件循环中添加一个永远不会完成的协程以保持程序不退出。示例代码如下:
import asyncio
async def never_completed():
await asyncio.sleep(3600) # 等待1小时
async def main():
while True:
print("Asyncio program is running...")
await asyncio.sleep(1)
asyncio.run(asyncio.gather(main(), never_completed()))
在这个示例代码中,never_completed
协程将永远等待1小时,期间如果事件循环中没有其他任务,程序仍会运行。main
协程将在while循环内打印消息,并在每次循环后暂停1秒。使用asyncio.gather
函数将两个协程一起加入到事件循环中。如果这里只把main
协程加入事件循环,程序将在第一次while循环后退出。