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

使用Pyrogram处理多群组时触发TCPTransport已关闭OSError问题求助

Pyrogram多群组场景下TCP连接关闭错误原因及解决方向

错误信息

raise e from None
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/session/session.py", line 389, in invoke
return await self.send(query, timeout=timeout)
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/session/session.py", line 340, in send
raise e
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/session/session.py", line 337, in send
await self.connection.send(payload)
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/connection/connection.py", line 69, in send
await self.protocol.send(data)
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/connection/transport/tcp/tcp_abridged.py", line 38, in send
await super().send(
File "/home/tabssit2/virtualenv/2baT/3.8/lib/python3.8/site-packages/pyrogram/connection/transport/tcp/tcp.py", line 104, in send
raise OSError(e)
OSError: unable to perform operation on <TCPTransport closed=True reading=False 0x55e969ef2de0>; the handler is closed
[10] Retrying "updates.GetState" due to: unable to perform operation on <TCPTransport closed=True reading False 0x55e969ef2de0>; the handler is closed

可能原因

  • TCP连接资源过载:大量群组的更新推送会让单个Pyrogram会话的TCP长连接负载过高,触发Telegram服务器的连接阈值限制,或者主机文件描述符耗尽,导致连接被强制关闭。
  • 事件循环阻塞:handler中存在未正确使用await的同步阻塞代码,占用事件循环导致无法及时处理Telegram的心跳包,服务器判定连接超时并关闭。
  • Pyrogram版本缺陷:旧版本Pyrogram在高并发更新场景下存在连接管理bug,无法妥善处理多群组的连接维护。
  • 主机网络限制:主机防火墙、NAT规则或服务商策略限制了长连接数量,群组增加后超出限制导致连接被切断。

解决方向

  • 调整连接配置:
    • 创建Client时设置connection_retries=15(提高重试次数)、timeout=30(延长超时时间),增强连接容错性。
    • 改用HTTP连接模式:connection_type=pyrogram.ConnectionType.HTTP,降低TCP长连接的压力。
  • 优化handler逻辑:
    • 确保所有异步操作都添加await,避免同步代码阻塞事件循环。
    • 使用asyncio.Semaphore限制并发处理的任务数量,示例代码:
      from asyncio import Semaphore
      
      sem = Semaphore(10)  # 限制同时处理10个任务
      
      @app.on_message()
      async def handler(client, message):
          async with sem:
              # 处理逻辑
              pass
      
  • 提升系统资源限制:
    • 查看当前文件描述符限制:ulimit -n,若低于65535,修改/etc/security/limits.conf添加:
      soft nofile 65535
      hard nofile 65535
      
    • 重启系统或重新登录后生效。
  • 升级依赖版本:
    • 执行pip install --upgrade pyrogram tgcrypto,更新到最新版修复已知bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:26:26