最近在使用 Flask 中使用 SQLAlchemy  开发程序,一开始好好的,然后使用 uWSGI 部署到线上后,出现了各种 mysql 客户端的问题,如:

(_mysql_exceptions.ProgrammingError) (2014, "Commands out of sync; you can't run this command now")

NoSuchColumnError: "Could not locate column in row for column 'user_token.uid'"

等等。

直觉告诉我,一定是多线程引起的问题。但 flask 在使用 sqlalchemy 时,已经使用 scoped_session 包装了数据库的连接,使每个线程独立创建一个数据库连接,应该没有并发问题(参考:http://blog.csdn.net/yueguanghaidao/article/details/40016235)

于是就想是不是 uWSGI 本身的机制导致,然后看到此篇文章,才豁然开朗。http://mattharris.org/2015/10/fixing-sqlalchemy-mysql-errors-on-restart-of-uwsgi/

主要问题是说,uWSGI 启动 app 时,先在一个父进程中启动,然后 fork 出几个子线程。所以数据库连接也被 fork 出来了,于是出现了并发问题。在子线程中,出现问题后,会重新连接数据库,于是服务器又恢复健康状态了。

解决方法是,在 uWSGI 启动时增加 lazy-apps = true 属性,需要注意的是,这样会消耗较多的内存,因为子线程不是被 fork 出来的。

【百度了很久都没有结果,然后花钱买了vpn,google一下立马找到解决方案】

uWSGI 和 SQLAlchemy 一起使用的注意事项的更多相关文章

  1. flask中使用SQLAlchemy操作mysql的一些注意事项和坑

    一 ImportError: cannot import name 'db' 由于app最后才加载,所以其他文件,比如models.py不能从app.py导入任何变量, 要使用db可以先定义一个,之后 ...

  2. Flask and uWSGI - unable to load app 0 (mountpoint='') (callable not found or import error)

    Here is my directory structure: -/path/to/folder/run.py -|app -|__init__.py -|views.py -|templates - ...

  3. 【Python】 SQLAlchemy的初步使用

    SQLAlchemy 在很多Python的web框架中都整合进了SQLAlchemy这个主要发挥ORM作用的模块.所谓ORM,就是把复杂的SQL语句给包装成更加面向对象,易于理解的样子.在操作数据库的 ...

  4. 项目的发布(nginx、uwsgi、django、virtualenv、supervisor)

    导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...

  5. Install Python+Django+Nginx+UWSGI

    一.软件环境: CentOS6.6_64bit 需要用到的软件: [root@django tools]# ll 总用量 33336 -rw-r--r-- 1 root root 7497785 3月 ...

  6. Flask-Session SQLAlchemy Script Migrate wtforms

    Flask-session Flask-session跟框架自带的session有什么区别呢~ 框架自带的session是通过请求上下文~放入到Local中的~那如果我们想把session放入别的地方 ...

  7. 阿里云部署 Flask + uWSGI + Nginx

    一.引言 今天入手了一台阿里云服务器,是centeros 7.5版本.本文解决的是 Flask 的部署问题.假设你的Flask的应用已经完成,现在只是部署的问题,本文以部署我的二次开发微信订阅号的项目 ...

  8. nginx1.4.7+uwsgi+django1.9.2项目部署,liunx系统为ubuntu14.0.4。

    本文基于root用户下进行部署,django项目名称为BDFS 1.  安装依赖包,终端输入命令 1)         环境依赖包 apt-get update apt-get install pyt ...

  9. uwsgi+nginx项目上线

    一.基础环境配置 1.Linux安装配置     1.设置IP地址 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 ...

随机推荐

  1. IPv4地址被用光,IPv6将接手

    截止2019年11月26号,全球所有43亿个IPv4地址已全部分配完毕,这一情况也宣告着IPv6时代的正式来临.IPv6和5G一样是关系到国家安全和战略发展的重大事情. IPv6简单来说,就是一个互联 ...

  2. 吴裕雄--天生自然Numpy库学习笔记:NumPy 矩阵库(Matrix)

    import numpy.matlib import numpy as np print (np.matlib.empty((2,2))) # 填充为随机数据 numpy.matlib.zeros() ...

  3. 关于ASA的TCP MSS

    About the TCP MSS The TCP maximum segment size (MSS) is the size of the TCP payload before any TCP a ...

  4. 杭电 2096 小明A+B

    小明A+B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. Ext里dialog弹窗关闭与父窗口刷新问题总结

    1.弹出弹窗的js代码 var dlg = new J.dialog({ id: 'unDelTel', title:'缴费', page:encodeURI('<%=basePath%> ...

  6. 一、json与jsonp的使用

    1.json与jsonp的引入    在ajax中 JSON用来解决数据交换问题,而JSONP来实现跨域.    备注:跨域也可以通过服务器端代理来解决;    理解:JSON是一种数据交换格式,而J ...

  7. Copy-On-Write容器(转载)

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  8. teraterm中状态框statusbox

    ;Author : Bing ;Date : 1/17/2019;Usage: modify log drictory according to actual drictorylogfile=&quo ...

  9. js缓存

    jsp页面加载的js有时候会有缓存 可以给引入的js加一个版本号,-------版本号不一致,会重新加载 <script type="text/javascript" src ...

  10. 0-1背包问题(0-1 knapsack problem)

    0-1背包问题描述:一个正在抢劫商店的小偷发现了n个商品,第i个商品价值 vi 美元,重 wi 磅,vi 和 wi 都是整数.这个小偷希望拿走价值尽量高的商品,但他的背包最多能容纳 S 磅重的商品,S ...