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探索之爬取电商售卖信息代码示例
Oct 27 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
python实现求最长回文子串长度
Jan 22 Python
python实现机器人行走效果
Jan 29 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
python实现在函数中修改变量值的方法
Jul 16 Python
python解析多层json操作示例
Dec 30 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
python简单的三元一次方程求解实例
Apr 02 Python
keras 指定程序在某块卡上训练实例
Jun 22 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php在linux下检测mysql同步状态的方法
2015/01/15 PHP
PHP实现留言板功能的详细代码
2017/03/25 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
node.js中的fs.readlink方法使用说明
2014/12/17 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
react 生命周期实例分析
2020/05/18 Javascript
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python实现各种插值法(数值分析)
2019/07/30 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
后勤服务中心总经理工作职责
2014/03/03 职场文书
班级旅游计划书
2014/05/03 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
2014年纪委工作总结
2014/12/05 职场文书
数学复习课教学反思
2016/02/18 职场文书
导游词之西安骊山
2019/12/03 职场文书
python实现进度条的多种实现
2021/04/29 Python
vscode中使用npm安装babel的方法
2021/08/02 Javascript
Python中的pprint模块
2021/11/27 Python
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫