MongoClient 在 fork 之前打开。仅创建 MongoClient Flask

Beq*_*dze 2 pymongo flask uwsgi flask-mongoengine

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

lazy-apps = true 问题已修复,但 uwsgi 似乎需要更多时间来加载可以执行哪些操作以获得最佳性能?

Beq*_*dze 7

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

客户端 = MongoClient(connect=False, username='dbadmin', password='somepass', authSource='somedb')

Mongoengine 和 pymongo 的解决方案


Luk*_*ski 6

如果您使用应用程序工厂模式,那么设置MongoClient connection=False应该可以修复它。它适用于我的 Flask 应用程序(v1.0.2),在uwsgi 服务器(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
Run Code Online (Sandbox Code Playgroud)