Python django使用多进程连接mysql错误的解决方法


Posted in Python onOctober 08, 2018

问题

mysql 查询出现错误

error: (2014, "Commands out of sync; you can't run this command now")1

查询

mysql文档中的解释

  If you get Commands out of sync; you can't run this command now in your client code, you are calling client functions in the wrong order.
  This can happen, for example, if you are using mysql_use_result() and try to execute a new query before you have called mysql_free_result(). It can also happen if you try to execute two queries that return data without calling mysql_use_result() or mysql_store_result() in between.

调用顺序错误,同一个连接,发出2个查询请求,第一个请求发出之后没有等到mysql返回就发出第二个请求

背景 思考

我这里的程序是这样的,在django框架中起了一个定时任务,这个任务中有个循环,主线程循环查询mysql然后在循环体中生成了子进程,子进程中也有mysql查询。

我测试了下不实用多进程的情况没有问题,使用多进程就会出现这个问题。

对照上面的文档,其实不难想到,错误应该是这样的

  1. 父进程和mysql建立的连接A,循环中fork出一个子进程
  2. 子进程保持了父进程的变量,也就是拥有mysql连接A
  3. 子进程去用连接A查询mysql,父进程这个时候也并发的使用连接A访问mysql
  4. 这样很容易出现了上面Mysql提到的情况,结果就报错了

 Python django使用多进程连接mysql错误的解决方法

解决

解决的方案其实很容易想到,就是当我们fork一个进程之后,让他从新获取一个和mysql的连接C或者D就好了嘛,
结果几个测试,得到如下的方案。

在父进程的loop中,创建子进程之前关闭mysql连接,这样子进程中就会重新连接mysql。

from django import db
  db.close_connection()
  p = Process(target=ap5mintes_scan, args=(ac, details, mtime))
  p.start()

其实就是状态copy的问题,本来多个线程同时并发调用一个connection也不对.

后面做了个测试 ,多进程的情况下查看mysql processlist,的确使用建立多个mysql 连接。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中字典和JSON互转操作实例
Jan 19 Python
python超简单解决约瑟夫环问题
May 12 Python
使用Python的urllib2模块处理url和图片的技巧两则
Feb 18 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
Python unittest单元测试框架总结
Sep 08 Python
python的concat等多种用法详解
Nov 28 Python
Python模块的加载讲解
Jan 15 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
Python Pandas批量读取csv文件到dataframe的方法
Oct 08 #Python
Python中的函数式编程:不可变的数据结构
Oct 08 #Python
详解多线程Django程序耗尽数据库连接的问题
Oct 08 #Python
JSON文件及Python对JSON文件的读写操作
Oct 07 #Python
Python实现登陆文件验证方法
Oct 06 #Python
python对日志进行处理的实例代码
Oct 06 #Python
浅析Python函数式编程
Oct 06 #Python
You might like
深入探讨PHP中的内存管理问题
2011/08/31 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
js断点调试经验分享
2017/12/08 Javascript
webpack下实现动态引入文件方法
2018/02/22 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
python实现DNS正向查询、反向查询的例子
2014/04/25 Python
Python下线程之间的共享和释放示例
2015/05/04 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
简单了解python协程的相关知识
2019/08/31 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
植树节标语
2014/06/27 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
赤壁观后感(2)
2015/06/15 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
mysql查找连续出现n次以上的数字
2022/05/11 MySQL