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 相关文章推荐
wxPython 入门教程
Oct 07 Python
python查找第k小元素代码分享
Dec 18 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
python简单实例训练(21~30)
Nov 15 Python
python实现教务管理系统
Mar 12 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
Python 实现两个服务器之间文件的上传方法
Feb 13 Python
Python3.5局部变量与全局变量作用域实例分析
Apr 30 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
python/golang实现循环链表的示例代码
Sep 14 Python
python zip()函数的使用示例
Sep 23 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
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
Valerio 发布了 Mootools
2006/09/23 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
js计算任意值之间随机数的方法
2015/01/16 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
javascript每日必学之基础入门
2016/02/16 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
Python解析最简单的验证码
2016/01/07 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
解决Mac下使用python的坑
2019/08/13 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
Python实现ATM系统
2020/02/17 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
店长岗位职责
2013/11/21 职场文书
小学少先队活动方案
2014/02/18 职场文书
《圆明园的毁灭》教学反思
2014/02/28 职场文书
文体活动实施方案
2014/03/27 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
JavaScript实现两个数组的交集
2022/03/25 Javascript