前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uwsgi 多进程导致数据库连接丢失的踩坑记录

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

作者头像
Ewdager
发布2020-07-14 14:25:17
2.3K1
发布2020-07-14 14:25:17
举报
文章被收录于专栏:Gvoidy备份小站Gvoidy备份小站

起因

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

试验①

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

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

MySQL连接驱动性能对比
MySQL连接驱动性能对比

结果只是使触发这种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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
    • 试验①
      • 试验②
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档