当我启动某些服务时,它会报告此类警告并且服务停止:
/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 必须创建连接和后台线程。一旦发生这种情况,在 fork 子进程中使用它就不再安全了。例如,这是不安全的:
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 之前创建客户端。在 fork 之后,在子流程中创建您的客户端。
关于python - MongoClient 在 fork 之前打开。创建 MongoClient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46441918/