【问题标题】:keep a continuous mongo connection active using pymongo使用 pymongo 保持持续的 mongo 连接处于活动状态
【发布时间】:2015-10-12 20:45:25
【问题描述】:

我有一个从 kafka 读取的消费者,它有一个连续的事件流,我必须经常写入一个 mongo 集合,我必须为此打开一个连续的 mongo 连接。我对此的解决方案是相当 hacky,我觉得每 5 分钟左右重新初始化一次连接,以避免网络超时。这是为了避免在没有来自 kafka 的事件并且连接空闲的时间段内。

谁能提出一个更好的方法来做到这一点?因为我很确定这是建立与 mongo 的持续连接的错误方法。

我正在使用 pymongo 客户端。

我有一个带有辅助方法的 MongoAdapter 类:

    from pymongo import MongoClient
    import pymongo
    import time

    class MongoAdapter:
        def __init__(self,databaseName,userid,password,host):
            self.databaseName=databaseName
            self.userid=userid
            self.password=password
            self.host=host
            self.connection=MongoClient(host=self.host,maxPoolSize=100,socketTimeoutMS=1000,connectTimeoutMS=1000)
            self.getDatabase()
        def getDatabase(self):
            try:
                if(self.connection[self.databaseName].authenticate(self.userid,self.password)):
                print "authenticated true"
                self.database=self.connection[self.databaseName]
            except pymongo.errors.OperationFailure:
                print "Error: Please check Database Name, UserId,Password"

我使用该类以以下方式重新连接:

   adapter_reinit_threshold=300   #every 300 seconds, instantiate new mongo conn.
   adapter_config_time=time.time()
   while True
       if (time.time()-adapter_config_time) > adapter_reinit_threshold:
            adapter=MongoAdapter(config.db_name,config.db_user,config.db_password,config.db_host)   #re-connect
            adapter_config_time=time.time()   #update adapter_config_time

我这样做的原因是因为我认为旧的未使用对象(打开连接,将被垃圾收集并关闭连接)。虽然这种方法效果很好,但我想知道是否有更简洁的方法来实现,以及这种方法可能存在哪些缺陷。

【问题讨论】:

    标签: python mongodb garbage-collection database-connection pymongo


    【解决方案1】:

    来自pymongo.mongo_client.MongoClient的文档

    如果操作由于网络错误而失败,ConnectionFailure 是 引发并且客户端在后台重新连接。应用代码 应该处理这个异常(认识到操作失败) 然后继续执行。

    我认为您不需要实现自己的重新连接方法。

    【讨论】:

    • 非常有用,你。我没有考虑实现任何重试逻辑,但事实证明这就是我所需要的 - 我的测试现在更加可靠。
    猜你喜欢
    • 2012-01-03
    • 2021-09-13
    • 2013-08-27
    • 2019-09-01
    • 2014-06-18
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多