通常我們連接mongo數據庫會這樣做:
client = pymongo.MongoClient(host, port)
但是會發現一個問題,如果mongo連接不上,會在這裏阻塞很久。解決辦法可以看官方文檔http://api.mongodb.com/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient
MongoClient提供了一個serverSelectionTimeoutMS選項,從這裏我們可以看到默認是30s連接等待,難怪連接不上卡這麼久。
def connect(self, host, port):
count = 0
while True:
self.client = MongoClient(host, port, serverSelectionTimeoutMS=3)
try:
self.client.admin.command("ping")
except ConnectionFailure, err_msg:
log.error(err_msg)
count = count + 1
else:
break
if count == 3:
return False
return True
優化後,我們可以快速知道是否連接成功,並且嘗試3次,不用阻塞30s這麼久