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编写爬虫小程序
May 14 Python
Python正则捕获操作示例
Aug 19 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
Dec 03 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
python三大神器之fabric使用教程
Jun 10 Python
使用django实现一个代码发布系统
Jul 18 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
pandas处理csv文件的方法步骤
Oct 16 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
python字符串拼接.join()和拆分.split()详解
Nov 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
模仿OSO的论坛(五)
2006/10/09 PHP
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
2013/06/01 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
用 JSON 处理缓存
2007/04/27 Javascript
IE JS编程需注意的内存释放问题
2009/06/23 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
angularjs ocLazyLoad分步加载js文件实例
2017/01/17 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Python数据可视化:饼状图的实例讲解
2019/12/07 Python
python ftplib模块使用代码实例
2019/12/31 Python
python连接打印机实现打印文档、图片、pdf文件等功能
2020/02/07 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
python实现在线翻译
2020/06/18 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
python Pexpect模块的使用
2020/12/25 Python
UNIX命令速查表
2012/03/10 面试题
监理员的岗位职责
2013/11/13 职场文书
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android