当我开始提供某些服务时,会报告此类警告并停止服务:
/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。 有人可以给我一些建议吗?
干杯, 启
答案 0 :(得分:6)
如果使用 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.
确保在导致连接的分支之前,您没有对客户端做任何事情。
更好的是,在完全分叉之前不要创建客户端。在fork之后,在子进程中创建客户端。
答案 1 :(得分:0)
我有同样的问题,但设置略有不同。对我而言,它是Flask应用,并且MongoClient
是通过flask_mongoengine
创建的。这是我的answare