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自动重试HTTP连接装饰器
Apr 28 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
详解Python pygame安装过程笔记
Jun 05 Python
Python MySQL数据库连接池组件pymysqlpool详解
Jul 07 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
Python接口开发实现步骤详解
Apr 26 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
python中sys模块是做什么用的
Aug 16 Python
Python极值整数的边界探讨分析
Sep 15 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变量存储的详解
2013/06/13 PHP
小谈php正则提取图片地址
2014/03/27 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php微信公众平台交互与接口详解
2016/11/28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
走出JavaScript初学困境—js初学
2008/12/29 Javascript
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
javascript 中设置window.location.href跳转无效问题解决办法
2017/02/09 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[54:33]2018DOTA2亚洲邀请赛小组赛 A组加赛 Liquid vs Optic
2018/04/03 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
深入学习python多线程与GIL
2019/08/26 Python
python操作docx写入内容,并控制文本的字体颜色
2020/02/13 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
学生请假条
2014/04/11 职场文书
房屋出售授权委托书
2014/10/12 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS