【问题标题】:MongoEngine and dealing with "UserWarning: MongoClient opened before fork. Create MongoClient with connect=False, or create client after forking"MongoEngine 和处理“UserWarning:MongoClient 在 fork 之前打开。使用 connect=False 创建 MongoClient,或在 fork 后创建客户端”
【发布时间】:2017-10-23 07:48:46
【问题描述】:

我正在使用 Celery 和 MongoEngine 作为我的 Django 应用程序的一部分。

当 celery @shared_task 通过 mongoengine 模型类访问 mongodb 数据库时,我收到此警告:

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

它显然与mongoengine所基于的多处理和pyMongo有关。

我的问题是:

在 mongoengine 中避免这个问题的最佳策略是什么?

请注意,我正在使用settings.py 中的mongoengine 连接到mongodb:

mongoengine.connect('my_mongo_database_name', alias='default')

【问题讨论】:

    标签: python django celery mongoengine django-celery


    【解决方案1】:

    在网上搜索了一下,我发现可以将额外的参数传递给mongoengine.connect函数,额外的参数将传递给底层的PyMongo类和函数。

    所以我简单地将mongoengine.connect() 调用编辑为以下内容:

    mongoengine.connect('my_mongo_database_name', alias='default', connect=False)
    

    警告停止出现。尽管如此,我不确定这是处理警告的最佳方法。如果您有更好的答案,请发布,我很乐意对其进行测试并最终接受。

    【讨论】:

    • 对 celery 和 Flask 有同样的问题。也想知道最好的方法。
    • 适用于 celery 和 Flask-mongoengine (pyMongo v. 3.7.2)
    猜你喜欢
    • 2021-03-23
    • 2018-03-08
    • 2019-09-20
    • 2018-12-10
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2021-12-13
    相关资源
    最近更新 更多