2017-09-27 71 views
0

當我開始我的一些服務,它報告這樣的警告和服務站:MongoClient在fork之前打開。創建MongoClient

/usr/lib64/python2.6/site-packages/pymongo/topology.py:75: 

UserWarning:MongoClient叉之前打開。使用connect = False創建MongoClient, 或在分岔後創建客戶端。見PyMongo的文檔的詳細信息: http://api.mongodb.org/python/current/faq.html#using-pymongo-with-multiprocessing> 「MongoClient叉之前打開創建MongoClient。」

然而,「MongoClient」已使用參數「連接=假」,你可以查看下面的代碼:

client = MongoClient(host, port, connect=False) 

它仍然無法正常工作。順便說一句,我已將我的pymongo版本升級到3.4.0。 有人可以給我一些建議嗎?

乾杯, 凱

回答

4

如果使用的MongoClient的接觸MongoDB服務器,那麼MongoClient必須建立連接和後臺線程的任何操作。一旦發生這種情況,在分叉子進程中使用它就不再安全。例如,這是不安全的:

client = MongoClient(connect=False) 
client.admin.command('ping') # The client now connects. 
if not os.fork(): 
    client.admin.command('ping') # This will print the warning. 

請確保您沒有在導致它進行連接的分支之前對客戶端執行任何操作。

更好的是,不要在分叉之前創建客戶端。在子流程中創建您的客戶端。

+0

在我重新啓動所有服務之前,代碼正在工作。這很奇怪。 –