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类方法与对象方法
Mar 15 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
python实现按行分割文件
Jul 22 Python
python中web框架的自定义创建
Sep 08 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
python文字转语音的实例代码分析
Nov 12 Python
Python logging模块写入中文出现乱码
May 21 Python
Java byte数组操纵方式代码实例解析
Jul 22 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python多个MP4合成视频的实现方法
Jul 16 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
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
php上传文件的增强函数
2010/07/21 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
NodeJS实现不可逆加密与密码密文保存的方法
2018/03/16 NodeJs
vue实现树形菜单效果
2018/03/19 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
如何设置Java的运行环境
2013/04/05 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
简单叙述一下MYSQL的优化
2016/05/09 面试题
高中生活自我鉴定
2014/01/18 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
商务日语专业毕业生自荐信
2014/03/27 职场文书
工伤赔偿协议书
2014/04/15 职场文书
美德少年事迹材料500字
2014/08/19 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2015年药店工作总结
2015/04/20 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书