专栏首页Gvoidy备份小站uwsgi 多进程导致数据库连接丢失的踩坑记录

uwsgi 多进程导致数据库连接丢失的踩坑记录

起因

项目使用的 Flask+SQLAlchemy+uwsgi ,突然有一天编写了一个有对数据库高并发的接口。然后其他本来正常的接口就偶尔会出现404错误,且必须重启服务才能解决。

试验①

以为是MySQL连接池和超时时间导致的,反复查看发现并没有什么问题。然后怀疑到是不是python对MySQL的连接驱动导致的。

项目里使用的pymysql被公认为是比较慢的连接驱动。索性换成了mysqldb。

结果只是使触发这种bug的频率稍微降低了一点

试验②

后来就怀疑到是不是uwsgi起多进程的时候触发了什么奇怪的bug,结果一搜就在Stack Overflow上发现了宝藏。

When working with multiple processes with a master process, uwsgi initializes the application in the master process and then copies the application over to each worker process. The problem is if you open a database connection when initializing your application, you then have multiple processes sharing the same connection, which causes the error above.

简单翻译一下,就是uwsgi启动多进程时,会启动一个主进程初始化所有的app(其中包括数据库连接),然后将所有app复制到其他进程中。这!就!导!致!了!所有进程全部共用一个MySQL的连接

如果在uwsgi.ini中添加参数lazy-apps=true,即可让各个进程都创建自己的app。即所有进程都有属于自己的MySQL连接了。

详细地址: using-flask-sqlalchemy-in-multiple-uwsgi-processes

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 操作系统实验二归纳

    本实验是要求在linux环境下测试fork()和exec(),并建立一个简单的shell(带cd、env、echo、help、jobs、quit命令)

    Ewdager
  • Pandas笔记-基础篇

    Numpy 数组运算都会保留索引和值之间的链接,但这些操作并不会改变原Series本身(与ndarray的选区操作相对)

    Ewdager
  • Numpy 笔记-基础篇

    除非显式说明,np.array会尝试为新建的这个数组判断一个较为合适的数据类型。数据类型保存在特殊的dtype对象中。比如上面的两个例子中。我们有:

    Ewdager
  • CocoaTouch 中的 NSString

    如果是运行在在 iOS 5.0 之前或者没有使用 ARC 的情况下, 需要手工调用 release 方法进行回收。

    beginor
  • golang protobuf 教程

    This tutorial provides a basic Go programmer’s introduction to working with prot...

    mojocn
  • How to use Chrome HAR save HTTP performance

    For performance analysis we would like to archive the detail performance for eac...

    Jerry Wang
  • 如何使用Chrome扩展应用postman发送SAP UI5 batch操作

    There is a standard Gateway client tool ( transaction code /IWFND/GW_CLIENT ) wh...

    Jerry Wang
  • Macbook 修改最近路径列表 Recent Places 数量

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    阳光岛主
  • PAT 1034 Head of a Gang (30分) 图的连通分量 + DFS

    One way that the police finds the head of a gang is to check people's phone call...

    vivi
  • Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)

    A. Mike and palindrome time limit per test:2 seconds memory limit per test:256 m...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券