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连接字符串的方法小结
Jul 13 Python
Flask数据库迁移简单介绍
Oct 24 Python
Python 反转字符串(reverse)的方法小结
Feb 20 Python
Python使用folium excel绘制point
Jan 03 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
Python Flask 搭建微信小程序后台详解
May 06 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
python3获取url文件大小示例代码
Sep 18 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
用Python实现职工信息管理系统
Dec 30 Python
Python基础知识学习之类的继承
May 31 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/09 PHP
php生成excel文件的简单方法
2014/02/08 PHP
thinkPHP5.1框架中Request类四种调用方式示例
2019/08/03 PHP
php中对象引用和复制实例分析
2019/08/14 PHP
PHP反射基础知识回顾
2020/09/10 PHP
Node.js中child_process实现多进程
2015/02/03 Javascript
深入理解MVC中的时间js格式化
2016/05/19 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
element中Steps步骤条和Tabs标签页关联的解决
2020/12/08 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
用Python中的字典来处理索引统计的方法
2015/05/05 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
悬挂训练绳:TRX
2017/12/14 全球购物
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
初中生个人学习的自我评价
2013/12/04 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
平安建设汇报材料
2014/12/29 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
采购部年度工作总结
2015/08/13 职场文书
企业愿景口号
2015/12/25 职场文书
《所见》教学反思
2016/02/23 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python