You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中while True循环内await asyncio.sleep()的阻塞问题咨询

代码实际运行行为分析

你的这段asyncio代码的实际运行行为基本符合你的预期,但有个小细节需要注意,下面一步步拆解:

实际运行流程

  1. 程序启动后,main()函数会先获取事件循环,打印starting loop
  2. 调用loop.run_until_complete(asyncio.gather(task()))时,事件循环开始调度执行task()协程:
    • 首先执行print("doing task"),输出doing task
    • 进入无限while True循环,先打印while true looping,然后遇到await asyncio.sleep(2):此时协程会被挂起,事件循环等待2秒后唤醒它
    • 2秒后,协程恢复执行,再次打印while true looping,然后又挂起等待2秒,如此周而复始
  3. 因为task()是无限循环的协程,asyncio.gather()永远不会完成,所以loop.run_until_complete()会一直阻塞,程序会持续运行,直到你手动终止(比如按下Ctrl+C)

和你预期的差异

你预期的循环输出是while true loop,但代码里写的是print("while true looping"),所以实际输出的是带ing的版本,这是个小笔误。

额外优化提示

如果想要让这个协程能够被优雅终止,你可以考虑给协程添加终止条件,或者使用asyncio.create_task()结合事件循环的run_forever(),再配合信号处理来实现优雅退出,但这是额外的优化点啦。

内容的提问来源于stack exchange,提问作者3tbraden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:08:45