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 相关文章推荐
Django压缩静态文件的实现方法详析
Aug 26 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
Jan 08 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
详解python调用cmd命令三种方法
Jul 08 Python
python树的同构学习笔记
Sep 14 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
django创建css文件夹的具体方法
Jul 31 Python
Python打印不合法的文件名
Jul 31 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
如何使用flask将模型部署为服务
May 13 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将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
JavaScript 图像动画的小demo
2012/05/23 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
three.js实现圆柱体
2018/12/30 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python struct.unpack
2008/09/06 Python
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
决策树的python实现方法
2014/11/18 Python
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
浅谈python对象数据的读写权限
2016/09/12 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
2020/05/27 Python
Python3.4解释器用法简单示例
2019/03/22 Python
python获取Pandas列名的几种方法
2019/08/07 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
银行见习期自我鉴定
2014/01/29 职场文书
我的大学生活演讲稿
2014/04/25 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
工程承包协议书
2014/10/20 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
Python 处理表格进行成绩排序的操作代码
2021/07/26 Python
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers