当我启动某些服务时,它会报告此类警告并且服务停止:

/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/

10-12 15:25