web-dev-qa-db-ja.com

MongoClientはフォークの前に開きました。 MongoClientを作成します

一部のサービスを開始すると、そのような警告が報告され、サービスが停止します。

/usr/lib64/python2.6/site-packages/pymongo/topology.py:75: 
UserWarning: MongoClient opened before fork. Create MongoClient with connect=False, 
or create client after forking. See PyMongo's documentation for details: 
http://api.mongodb.org/python/current/faq.html#using-pymongo-with-multiprocessing>
"MongoClient opened before fork. Create MongoClient "

ただし、以下のコードを確認できるように、MongoClientはパラメータconnect=Falseを使用しています。

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

それはまだ機能していません。ちなみに、pymongoのバージョンを3.4.0にアップグレードしました。誰かが私にいくつかの提案をすることができますか?

乾杯、カイ

6
KOP Lee

se MongoDBサーバーに接続する操作にMongoClientを使用する場合、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.

クライアントを接続させるフォークの前に、クライアントに対して何もしていないことを確認してください。

さらに良いことに、フォークする前にクライアントを作成しないでください。サブプロセスで、フォークの後にクライアントを作成します。

10

私は同じ問題を抱えていましたが、セットアップが少し異なりました。私にとってはFlaskアプリで、MongoClientflask_mongoengineを介して作成されました。これが私の answare です。

0
Lukasz Dynowski