gpt4 book ai didi

python - 使用 pymongo 检查服务器状态并超时

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:02 24 4
gpt4 key购买 nike

我有一个监控脚本每分钟检查一次我们的 mongodb 实例,并且需要一种好的方法来连接,执行简单的查询并让它在 10 秒内返回,或者如果需要超过 10 秒的时间,则以某种可预测的方式简单地超时10 秒,让我捕获该错误/异常。

根据 pymongo 的文档,您无法设置查询超时,只能设置套接字和连接超时(这似乎工作正常)。有什么解决办法吗?

程序流程是这样的:

  1. 连接到 mongodb
  2. 执行简单的 find() 查询来检查上次更新的文档(用于统计)
  3. 关闭连接。

#1 总是工作正常,但整个请求在 #2 时超时,我无法在自己设定的 10 秒限制内捕获它。

由于大量并发的 Map-Reduce 查询,锁定似乎发生在高峰时段。我们使用的是 mongodb 2.4.3。

最佳答案

您可以使用socketTimeoutMS当您创建 mongo_client 时,或者您可以将其添加到您的查找中。

例如,在下面的代码中,我连接到本地 mongod,然后在 $where 函数中使用 10 秒 sleep 来模拟长时间运行的查询(不推荐)。 1 秒的 socketTimeoutMS 导致调用失败,并显示 pymongo.errors.AutoReconnect: timed out :

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
if client.test.ing.count() == 0:
client.test.ing.insert({})
client.test.ing.find( { '$where' : 'function() { sleep(10000); return True; }' } , socketTimeoutMS=1000).count()

希望对您有所帮助。

注1:如果集合为空,则客户端立即返回

注意 2:如果您只是获得光标并且不执行任何操作,那么您不会收到错误

关于python - 使用 pymongo 检查服务器状态并超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16831530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com