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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
linux下python使用sendmail发送邮件
May 22 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
很酷的python表白工具 你喜欢我吗
Apr 11 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
python3.4 将16进制转成字符串的实例
Jun 12 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
python库skimage给灰度图像染色的方法示例
Apr 27 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
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
PHP中error_log()函数的使用方法
2015/01/20 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
AngularJs导出数据到Excel的示例代码
2017/08/11 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
windows下ipython的安装与使用详解
2016/10/20 Python
python PyTorch预训练示例
2018/02/11 Python
python实现换位加密算法的示例
2018/10/14 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
Python定义一个Actor任务
2020/07/29 Python
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
庆七一活动方案
2014/01/25 职场文书
房屋继承公证书
2014/04/10 职场文书
兽医医药专业求职信
2014/07/27 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
学生通报表扬范文
2015/05/04 职场文书
火烧圆明园观后感
2015/06/03 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
2019垃圾分类宣传口号汇总
2019/08/16 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript