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常用模块介绍
Nov 21 Python
python 的列表遍历删除实现代码
Apr 12 Python
Python实现的手机号归属地相关信息查询功能示例
Jun 08 Python
python将字典内容存入mysql实例代码
Jan 18 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
python 寻找离散序列极值点的方法
Jul 10 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
python实现四人制扑克牌游戏
Apr 22 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
Python3使用 GitLab API 进行批量合并分支
Oct 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备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php读取excel文件的简单实例
2013/08/26 PHP
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
php车辆违章查询数据示例
2016/10/14 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
js获取指定日期前后的日期代码
2013/08/20 Javascript
jquery scroll()区分横向纵向滚动条的方法
2014/04/04 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
javascript History对象原理解析
2020/02/17 Javascript
Python中的文件和目录操作实现代码
2011/03/13 Python
Python中实现switch功能实例解析
2018/01/11 Python
Python中正则表达式的用法总结
2019/02/22 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
python palywright库基本使用
2021/01/21 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
办公室主任职责范本
2014/03/07 职场文书
社区健康教育实施方案
2014/03/18 职场文书
团代会宣传工作方案
2014/05/08 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
离职报告范文
2014/11/04 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
会计做账心得体会
2016/01/22 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android