簡體   English   中英

使用pymongo保持連續的mongo連接活動

[英]keep a continuous mongo connection active using pymongo

我有一個來自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

我繼續這樣做的原因是因為我認為舊的未使用的對象(具有開放連接,將被垃圾收集並且連接關閉)。 雖然這種方法工作正常,但我想知道是否有更簡潔的方法來實現它,以及這種方法的缺陷是什么。

來自pymongo.mongo_client.MongoClient的文檔

如果由於網絡錯誤導致操作失敗,則會引發ConnectionFailure,並且客戶端將在后台重新連接。 應用程序代碼應處理此異常(識別操作失敗),然后繼續執行。

我認為您不需要實現自己的重新連接方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM