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

Pymongo操作间歇性无响应问题求助

解决PyMongo间歇性挂起无响应问题

1. 版本兼容性问题

PyMongo 3.10.0发布于2020年,而Python 3.10是2021年推出的,旧版本PyMongo对Python 3.10的支持不完善,存在未修复的阻塞类bug。PyMongo从3.12版本开始正式支持Python 3.10,建议升级至兼容版本:

pip install --upgrade pymongo>=3.12

2. 缺失超时配置导致无限等待

默认MongoClient未设置超时参数,当MongoDB服务或网络出现短暂异常时,客户端会无限期等待响应,直接导致程序挂起。修改代码添加超时限制:

from pymongo import MongoClient

# 配置各类超时参数(单位:毫秒)
client = MongoClient(
    'mongodb://localhost:27017',
    connectTimeoutMS=5000,        # 连接服务器超时时间
    socketTimeoutMS=5000,         # 读写操作超时时间
    serverSelectionTimeoutMS=5000 # 服务器选择超时时间
)
db_obj = client["my_database_name"]
query = {"name":"ABC"}

print("Going to perform mongo operations")
try:
    ping = client.admin.command('ping')
    if ping['ok'] == 1:
        print("mongo is up and running")
        data = list(db_obj["collection_name"].find(query))
        print(data)
    else:
        print("mongo is not up and running")
except Exception as e:
    print(f"Mongo operation failed: {str(e)}")

3. MongoDB服务器连接池或资源瓶颈

MongoDB 4.2的连接池配置可能存在瓶颈,或者服务器端积压了大量未释放的连接,导致新请求被阻塞:

  • 查看MongoDB日志(默认路径/var/log/mongodb/mongod.log),排查是否有连接超时、资源耗尽的报错信息。
  • 在MongoClient中限制连接池大小,避免创建过多连接:
    client = MongoClient(
        'mongodb://localhost:27017',
        maxPoolSize=10,  # 根据业务场景调整,默认是100
        # 加上之前的超时参数
        connectTimeoutMS=5000,
        socketTimeoutMS=5000,
        serverSelectionTimeoutMS=5000
    )
    

4. 操作系统网络栈异常

操作系统TCP连接处于TIME_WAIT/CLOSE_WAIT状态过多,会占用端口资源,导致新连接无法建立:

  • 执行netstat -an | grep 27017查看端口连接状态,清理异常连接。
  • 针对Linux系统,可调整TCP参数缩短TIME_WAIT超时:编辑/etc/sysctl.conf添加以下配置,执行sysctl -p生效:
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_fin_timeout = 30
    

内容的提问来源于stack exchange,提问作者Aswathi Raj K T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:04:55