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

Python asyncio协程何时可被中断?含代码场景疑问

Python asyncio协程的中断时机说明

你的协程不会在执行完a = 1、尚未执行b = 2时被中断。

asyncio的协程采用协作式调度,和多线程的抢占式调度完全不同——协程不会被随机打断,只有在遇到特定的「可等待操作」时,才会主动让出CPU,把控制权交还给事件循环,让其他协程有机会运行。

具体来说,协程会在以下场景让出事件循环:

  • 执行await语句,且后面跟的是asyncio可等待对象(比如asyncio.sleep()、其他异步函数、asyncio.Lock.acquire()、异步队列的读写操作等)
  • 使用asyncio.yield()(较冷门,现在更多用await替代)
  • 异步IO操作的await(比如异步HTTP请求、异步数据库查询等)

回到你的代码:a = 1和b = 2都是普通的同步赋值语句,属于连续的同步代码块,协程会一次性执行完这些语句,全程不会交出控制权。只有当执行到await asyncio.sleep(10)时,才会暂停当前协程,回到事件循环调度其他任务。

关于锁的重要性补充:
如果你的代码块是纯同步逻辑(没有任何await),那这段代码是原子性的——执行期间不会被其他协程打断,不需要额外加锁。只有当代码块中包含await操作时,才需要用asyncio.Lock来保护共享状态,因为await会让出控制权,其他协程可能在这段空隙中修改共享数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:02