【问题标题】:MongoClient opened before fork. Create MongoClient only FlaskMongoClient 在 fork 之前打开。仅创建 MongoClient Flask
【发布时间】:2018-12-10 20:29:22
【问题描述】:

我正在运行带有进程 4 的 uwsgi 线程模式的 Flask 并使用 pymongo 也 flask_mongoengine 和 uwsgi 说“MongoClient 在 fork 之前打开。仅创建 MongoClient ” 我尝试使用 connect=False 进行连接,但结果相同

lazy-apps = true 问题已修复,但似乎 uwsgi 需要更多时间来加载 怎样做才能获得最佳性能?

【问题讨论】:

    标签: flask pymongo uwsgi flask-mongoengine


    【解决方案1】:

    如果你使用appllication factory pattern,那么设置 MongoClient connection=False 应该可以解决它。它适用于我的烧瓶应用程序 (v1.0.2),在 uwsgi server (v2.0.18) 后面运行。

    示例

    # __init__.py
    
    from flask_mongoengine import MongoEngine
    
    mongo = MongoEngine()
    
    def create_app(config=None):
        app = Flask(__name__)
    
        app.config['MONGODB_HOST'] = 'localhost'
        app.config['MONGODB_PORT'] = 27017
        app.config['MONGODB_DB'] = 'datazzilla'
    
        # NOTE: This fixes "UserWarning: MongoClient opened before fork."
        # I'm not aware of side effects yet. Default value is/was "True"
        app.config['MONGODB_CONNECT'] = False
    
        mongo.init_app(app)
    
        return app
    

    【讨论】:

    • 和flask-login一起使用会不会有些不同
    【解决方案2】:

    app.config['MONGODB_SETTINGS'] = {'DB': 'somedb', "USERNAME": "dbadmin", "PASSWORD":"somepass",'connect': False}

    client = MongoClient(connect=False, username='dbadmin', 密码='somepass', authSource='somedb')

    Mongoengine 和 pymongo 的解决方案

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 2018-03-08
      • 2021-03-23
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2014-05-04
      • 2016-05-10
      相关资源
      最近更新 更多