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

Asyncio+pysnmp的SNMP脚本接收400条响应后停止处理

问题分析与解决思路

可能的诱因

  • Windows asyncio Selector 限制:Python 3.8 在 Windows 上默认使用 SelectorEventLoop,它对同时监听的套接字数量有默认阈值(约512个)。你的轮询批次是100台,到第4批左右刚好接近这个上限,后续SNMP请求的套接字无法被正常监听,导致收到响应也无法处理。
  • pysnmp 旧版本资源泄漏:你用的 pysnmp 4.4.12 是2020年的旧版本,异步模式下存在套接字未及时关闭的bug,随着批次增加,占用的文件句柄/套接字资源越积越多,触达系统限制后无法处理新响应。
  • 批次处理逻辑漏洞:如果脚本处理完一批后,没正确清理异步任务、关闭SNMP会话,导致任务队列堆积或资源占用无法释放,后续响应的回调就无法被执行。

可行的解决办法

  1. 切换到 ProactorEventLoop:Python 3.8+ 支持Windows专用的ProactorEventLoop,能突破Selector的套接字数量限制,在脚本开头添加:
    import asyncio
    asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
    
  2. 升级 pysnmp 版本:旧版本的资源泄漏问题在后续版本已修复,执行命令升级到最新稳定版:
    pip install --upgrade pysnmp
    
  3. 强化批次资源清理:每批任务完成后,主动调用pysnmp会话或传输对象的关闭方法,用上下文管理器管理会话生命周期,确保资源及时释放。
  4. 临时调整批次大小:把每批设备数从100降到50,验证是否能处理更多设备,确认是否是资源限制导致的问题。

验证方式

  • 修改事件循环后重新运行脚本,观察是否能处理所有设备的响应。
  • 用Windows资源监视器查看Python进程的句柄数量,看是否在处理到400台左右时达到峰值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:54:39