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 StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
Python学习小技巧之列表项的排序
May 20 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
关于python列表增加元素的三种操作方法
Aug 22 Python
python 切换root 执行命令的方法
Jan 19 Python
Python基本socket通信控制操作示例
Jan 30 Python
python操作kafka实践的示例代码
Jun 19 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Django choices下拉列表绑定实例
Mar 13 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 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 解析xml 的四种方法详细介绍
2016/10/26 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
js渐变显示渐变消失示例代码
2013/08/01 Javascript
Javascript实现代码折叠功能
2016/08/25 Javascript
利用angularjs1.4制作的简易滑动门效果
2017/02/28 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
2018/11/13 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
如何在python中使用selenium的示例
2017/12/26 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
django有哪些好处和优点
2020/09/01 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2015年财务科工作总结范文
2015/05/13 职场文书
Golang 遍历二叉树
2022/04/19 Golang
Python四款GUI图形界面库介绍
2022/06/05 Python