【问题标题】:Is there any way to decrease the time it takes for a pymongo.errors.AutoReconnect to occur?有什么方法可以减少 pymongo.errors.AutoReconnect 发生的时间吗?
【发布时间】:2018-07-19 07:59:21
【问题描述】:

我正在使用 3 节点 MongoDB 副本集并使用 Pymongo v3.3.1 连接到它。

在测试 AutoReconnect 和 ServerSelectionTimeout 等错误的处理时,我发现我无法(安全/可靠地)控制引发 AutoReconnect 异常所需的时间。

如果我实例化 MongoClient 并将参数 serverSelectionTimeoutMS 设置为例如 2000,我确实看到 ServerSelectionTimeout 异常在大约 2 秒内返回。但是,当触发自动重新连接的条件恰到好处时,它总是需要至少 20 秒,有时更接近 30 秒!

如何限制这种行为?我正在争取相对较高的可用性,并希望检测网络/副本集异常并相当快地开始我的重试逻辑。

【问题讨论】:

    标签: python mongodb python-2.7 pymongo


    【解决方案1】:

    事实证明,经过一番修改,使用 MongoClient 参数 socketTimeoutMS,如果设置为比 AutoReconnect 观察到的更快,将取代 AutoReconnect。

    与我最初的担心相反,这不会干扰长时间运行的查询,因为套接字连接得很好。

    我发现,在由于此设置而引发第一个 NetworkTimeout 异常后,可能需要 10 秒左右才能再次尝试。这也可以通过将 connectTimeoutMS 参数传递给 MongoClient 来解决,该参数很可能与 socketTimeoutMS 的值相同。

    如果有人发现此解决方案的任何警告,请在此处发布回复。

    【讨论】:

      猜你喜欢
      • 2018-03-02
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-25
      相关资源
      最近更新 更多