[英]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.