最近在使用 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一下立马找到解决方案】

最新文章

  1. NOI 4976:硬币
  2. HTML5-布局的使用
  3. 【URAL 1018】Binary Apple Tree
  4. 用hashMAP或ArrayList解决recylerView中checkbox的选择错乱问题。
  5. linux C学习笔记01--makefile
  6. Linux及安全——ELF实践
  7. Delphi 的绘图功能[1] - PolyBezier、PolyBezierTo
  8. Android SDK的docs访问速度很慢(新)
  9. C难点分析
  10. c++ 时间格式化
  11. ubuntu15.10升级时校验和不符的解决方法
  12. MFC动态创建按钮,并在按钮上实现位图的切换显示
  13. Python内置函数str()和repr()
  14. Linux用户相关的操作命令
  15. Python自学笔记-进程,线程(Mr serven)
  16. 不同版本的Chrom浏览器对应的ChromDriver的版本
  17. Codeforces Round #494 (Div. 3) D. Coins and Queries(贪心
  18. Java控制台常用命令
  19. Shell案例:图案打印
  20. Noip前的大抱佛脚----数论

热门文章

  1. traceback说明
  2. 解决CentOS下boost安装后不能使用的问题
  3. 「AHOI2014/JSOI2014」宅男计划
  4. Python - 代码片段,Snippets,Gist
  5. Pycharm创建一个Django项目
  6. Lucene学习笔记一
  7. python笔记心得
  8. pycharm add configuration
  9. Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )
  10. js 中一些重要的字符串方法