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

如何检查asyncio事件循环内部状态?排查高并发程序挂起问题

高并发场景下asyncio程序挂起排查

我有一个基于asyncio开发的Python程序,在高并发场景中,程序的某一部分会出现挂起现象。我希望自行检查asyncio事件循环的状态,以此来定位问题根源,具体情况如下:

挂起代码片段

async def poll_buffer(self):
    while True:
        try:
            val = self.buffer.get(block=False)
            # 程序在此处挂起
            await asyncio.gather(*[
                cb(val) for cb in self.callbacks
            ])
        except Empty:
            await asyncio.sleep(self.latency)

异常表现

奇怪的是,回调函数似乎根本没有开始执行——连最开头的打印语句都没有输出:

async def my_callback(val):
    print("HELLO") # 这行代码都未执行
    await do_expensive_thing() # 更不会执行到此处

排查进展

  • 问题仅在高并发场景下触发
  • 已排查死锁问题,甚至移除了所有asyncio.Lock,但情况并未改善
  • 推测可能是调度问题,希望深入了解asyncio底层运行机制
  • 程序其他异步部分通常能正常运行,但调试时也能触发它们挂起

更新:检查事件循环策略、asyncio.all_tasks()以及事件循环任务状态后,确认问题与asyncio事件循环无关。目前尚未完全明确原因,但发现函数调用中的错误被抑制了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:42:29