pymongo "ServerSelectionTimeoutError: No servers found yet" 錯誤的解決


系統轉移過程中,擅自把aptitude安裝的mongoengine換成了pip安裝,系統啟動以后,報這個錯誤

報錯提示:

 

  1. File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 748, in _socket_for_reads  
  2.     with self._get_socket(read_preference) as sock_info:  
  3.   File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__  
  4.     return self.gen.next()  
  5.   File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 712, in _get_socket  
  6.     server = self._get_topology().select_server(selector)  
  7.   File "/usr/local/lib/python2.7/dist-packages/pymongo/topology.py", line 141, in select_server  
  8.     address))  
  9.   File "/usr/local/lib/python2.7/dist-packages/pymongo/topology.py", line 117, in select_servers  
  10.     self._error_message(selector))  
  11. ServerSelectionTimeoutError: No servers found yet  


因為是系統轉移,剛開始是以為mongodb服務器那邊服務的問題,后來上網查了一下,發現是pymongo的3.0.*以后版本接口向前兼容的一個bug,SoF某貼(地址見最后)提供了2個方案:

 

方案一,多傳一個connect=False的參數:

 

  1. MongoClient(uri, connect=False)  


方案二、在初始化MongoClient實例之前,在子進程等幾秒,代碼如下:

 

 

  1. def start(uri):  
  2.   time.sleep(2)  
  3.   mclient = MongoClient(uri)  
  4.   mclient.db.collection.find_one()  
  5.   
  6. if __name__ == '__main__':  
  7.   p = multiprocessing.Process(target=start, args=('mongodb://localhost:27017/',))  
  8.   p.start()  

我的解決方案:雖然我用的不是上面任何方案的接口,我使用的是mongoengine的接口函數,底層任然是pymongo

 

 

  1. from mongoengine import connect  

 

按照方案一,在這個connect原調用位置的參數里面加了connect=False,問題解決。

第二個問題,使用新版本pymongo以后出現的問題,錯誤提示:

 

  1. [Errno 104] Connection reset by peer  


經SoF某貼,認為是mongodb的讀寫文件數超標了,其實我沒在mongodb的log里面找到相應信息,只是當時的確做了大數據量的mongodb讀寫操作,於是按照帖子的要求添加/etc/security/limits.d/mongodb.conf 文件,文件內容:

 

 

  1. mongodb        hard    nofile          99999  
  2. mongodb        soft    nofile          99999  
  3. mongodb        hard    nproc           99999  
  4. mongodb        soft    nproc           99999  


BugFix效果還待驗證

 

 

 

參考:SoF某貼:http://stackoverflow.com/questions/30710427/pymongo-and-multiprocessing-serverselectiontimeouterror


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM