python – MongoClient在fork之前打开.创建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.
有人可以给我一些建议吗?

干杯,

解决方法:

如果您将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之后,在子进程中创建客户端.

上一篇:pymongo问题集合


下一篇:python – Pymongo多处理