首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mongoengine运行uwsgi

使用mongoengine运行uwsgi
EN

Stack Overflow用户
提问于 2015-12-19 18:53:23
回答 3查看 1.2K关注 0票数 2

当我在多进程模式下启动uwsgi时,它告诉我pymongo应该与connect=False一起运行。如果我运行flask-mongoengine,我如何设置connect=False?

EN

回答 3

Stack Overflow用户

发布于 2016-05-02 06:19:15

嗯,正如Ju-won lee所说,添加选项lazy解决了问题,但正如uwsgi文档中所指出的那样,它是非常不受欢迎的:

http://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html

只要有可能,

uWSGI就会尝试使用fork()调用的写入时复制语义。默认情况下,它将在加载应用程序后派生,以尽可能多地共享它们的内存。如果由于某种原因,这种行为是不可取的,那么可以使用lazy-apps选项。这将指示uWSGI在每个工作线程的fork()之后加载应用程序。当心,因为有一个名为lazy的旧选项,它更具侵入性,也非常不受欢迎(它仍然存在,只是为了向后兼容)

所以,如果你想使用这个选项,最好使用--lazy-apps。据我所知,问题是默认情况下,flask的mongoengine只初始化一个分支进程无法使用的连接(由于pymongo客户端中的一些限制)。懒惰应用程序的选择是为每个fork加载所有内容(这会使用更多内存)。

有一个装饰器可以让你在完成prefork之后立即运行代码。

只需添加到您的应用程序:

代码语言:javascript
复制
from flask.ext.mongoengine import MongoEngine
from uwsgidecorators import postfork

app = Flask(__name__)
# do whatever you want with the application

db = MongoEngine() # set db as MongoEngine (without any app or configuration)

@prefork
def setup_db():
    db.init_app(app) # this code actually calls to "connect" in pymongo

# define the rest of calls, etc 

我希望这个答案能澄清一些问题!

票数 4
EN

Stack Overflow用户

发布于 2016-04-08 00:38:05

在您的uwsgi中使用lazy选项(--lazy)。

多进程的mongoengine发生死锁..:(

票数 0
EN

Stack Overflow用户

发布于 2021-06-18 15:51:51

https://github.com/MongoEngine/flask-mongoengine/blob/master/docs/index.rst

您可以使用设置connect=False,如下所示

代码语言:javascript
复制
app.config['MONGODB_SETTINGS'] = {
    'host': 'mongodb://localhost/database_name',
    'connect': False,
}
# or
app.config['MONGODB_CONNECT'] = False
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34369866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档