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程序的方法
Apr 21 Python
极简的Python入门指引
Apr 01 Python
python实现bucket排序算法实例分析
May 04 Python
Python面向对象特殊成员
Apr 24 Python
Python探索之Metaclass初步了解
Oct 28 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python实现图片识别加翻译功能
Dec 26 Python
python实现银行实战系统
Feb 26 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
Python lambda表达式原理及用法解析
Aug 18 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 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作的文本留言本的例子(二)
2006/10/09 PHP
目录,文件操作详谈―PHP
2006/11/25 PHP
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jquery的index方法实现tab效果
2011/02/16 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
python实现日志按天分割
2019/07/22 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python日志处理模块logging用法解析
2020/05/19 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
正规的求职信范文分享
2013/12/11 职场文书
库房主管岗位职责
2013/12/31 职场文书
英文求职信写作小建议
2014/02/16 职场文书
大学老师推荐信
2014/02/25 职场文书
企业文化标语大全
2014/06/10 职场文书
地震捐款倡议书
2014/08/29 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
美丽的大脚观后感
2015/06/03 职场文书
儿子满月酒致辞
2015/07/29 职场文书