首页 > 解决方案 > 如何使用 pymongo MongoClient 构造函数在给定时间限制后中止 mongo 操作?

问题描述

根据此响应,您可以通过 find() 参数或集合方法设置查询操作的时间限制:

cursor = db.collection.find(max_time_ms=1)

或者

cursor = db.collection.find().max_time_ms(1)

医生

  • max_time_ms(可选):指定查询操作的时间限制。如果超过指定的时间,操作将被中止并引发 ExecutionTimeout。传递它作为在游标上调用 max_time_ms() 的替代方法。

我们目前遇到的问题是一个查询运行了大约 30 分钟,然后它吃掉了所有的 RAM 并且服务器死了。我希望这个参数对查询给出一个硬限制,并且在给定时间之后服务器放弃。

由于我们的应用充满了finds和游标:有没有办法直接在MongoClient构造函数中设置这个参数?

医生

  • socketTimeoutMS:(整数或无)控制驱动程序在发送普通(非监控)数据库操作后等待响应的时间(以毫秒为单位),然后再断定发生网络错误。默认为无(无超时)。

  • connectTimeoutMS:(整数或无)控制在服务器监控期间驱动程序将等待多长时间(以毫秒为单位),在断定服务器不可用之前将新套接字连接到服务器时。默认为 20000(20 秒)。

  • serverSelectionTimeoutMS:(整数)控制驱动程序等待多长时间(以毫秒为单位)以找到可用的合适的服务器来执行数据库操作;在等待期间,可能会执行多个服务器监控操作,每个操作由 connectTimeoutMS 控制。默认为 30000(30 秒)。

...找不到另一个超时,而且这些似乎都不等同于max_time_ms. 我错过了什么吗?

标签: mongodbpymongopymongo-3.x

解决方案


推荐阅读