当前位置:  开发笔记 > 编程语言 > 正文

在多个uWSGI进程中使用Flask-SQLAlchemy

如何解决《在多个uWSGI进程中使用Flask-SQLAlchemy》经验,为你挑选了1个好方法。



1> 小智..:

你必须对uwsgi使用lazy-apps = true选项.

看到这个答案:uWSGI,Flask,sqlalchemy和postgres:SSL错误:解密失败或错误记录mac

我不会使用'lazy'选项,因为它已被弃用

当与具有主进程的多个进程工作,uwsgi初始化在主过程中的应用程序,然后复制应用到每个工作进程.问题是如果在初始化应用程序时打开数据库连接,则会有多个进程共享同一连接,从而导致上述错误.

在某些情况下,如使用flask_admin或调用Base.metadata.create_all()app/__init__.py,您的应用程序确实让与已同时导入了数据库的连接.lazy-apps=false导入模块后使用uwsgi分叉,因此连接的文件描述符被复制到子代.随着lazy-apps=trueuwsgi分叉,然后进行导入.这样每个子流程都有自己的连接.

uWSGI尽可能尝试(ab)使用fork()调用的Copy On Write语义.默认情况下,它会在加载应用程序之后进行分叉,以尽可能多地共享内存.如果出于某种原因不希望出现此行为,请使用lazy-apps选项.这将指示uWSGI在每个worker的fork()之后加载应用程序.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有