当我启动我的一些服务时,它会报告此类警告并停止服务:
/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.
有人可以给我一些建议吗?
干杯,
凯
解决方法:
如果您将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之前没有对客户端做任何事情,导致它连接.
更好的是,不要在分叉之前创建客户端.在fork之后,在子进程中创建客户端.