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复制文件代码实现
Dec 23 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
Python 支付整合开发包的实现
Jan 23 Python
python找出因数与质因数的方法
Jul 25 Python
Python中*args和**kwargs的区别详解
Sep 17 Python
Python 实现自动导入缺失的库
Oct 29 Python
使用python turtle画高达
Jan 19 Python
Python无损压缩图片的示例代码
Aug 06 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
Python实现简单得递归下降Parser
May 02 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
PHP7 windows支持
2021/03/09 PHP
jQuery 全选效果实现代码
2009/03/23 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
JS分页效果示例
2013/10/11 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
Vue.js实现可配置的登录表单代码详解
2018/03/29 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
Python实现字典去除重复的方法示例
2017/07/31 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
用Python一键搭建Http服务器的方法
2018/06/01 Python
老生常谈python中的重载
2018/11/11 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
财务主管自我鉴定
2014/01/17 职场文书
大专生毕业的自我评价
2014/02/06 职场文书
收银员岗位职责
2014/02/07 职场文书
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
体育运动口号
2014/06/09 职场文书
学校领导四风问题整改措施思想汇报
2014/10/09 职场文书
入党积极分子个人总结
2015/03/02 职场文书
消费者投诉书范文
2015/07/02 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
简单聊聊Vue中的计算属性和属性侦听
2021/10/05 Vue.js
java多态注意项小结
2021/10/16 Java/Android