有没有办法减少pymongo.errors.AutoReconnect发生的时间?

时间:2018-02-08 16:51:15

标签: python mongodb python-2.7 pymongo

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

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

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

如何限制此行为?我正在拍摄相对较高的可用性,并希望检测网络/副本设置异常并快速启动我的重试逻辑。

1 个答案:

答案 0 :(得分:0)

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

与我最初的担忧相反,这不会影响长时间运行的查询,因为套接字连接正常。

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

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