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 27 Python
python连接字符串的方法小结
Jul 13 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
详解Python:面向对象编程
Apr 10 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
解决python3中os.popen()出错的问题
Nov 19 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
Python Spyder 调出缩进对齐线的操作
Feb 26 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采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
joomla数据库操作示例代码
2016/01/06 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
js实现防止被iframe的方法
2015/07/03 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
初识简单却不失优雅的Vue.js
2016/09/12 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
bootstrap table使用入门基本用法
2017/05/24 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
原生js基于canvas实现一个简单的前端截图工具代码实例
2019/09/10 Javascript
python实现按行切分文本文件的方法
2016/04/18 Python
python实现装饰器、描述符
2018/02/28 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
详解python中eval函数的作用
2019/10/22 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
python中sys模块是做什么用的
2020/08/16 Python
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
2016/10/23 HTML / CSS
金讯Java笔试题目
2013/06/18 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
学生个人的自我评价分享
2013/11/05 职场文书
连锁超市项目计划书
2014/09/15 职场文书
活动宣传稿范文
2015/07/23 职场文书
医德医风学习心得体会
2016/01/25 职场文书
个人售房合同协议书
2016/03/21 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android
Django框架中模型的用法
2022/06/10 Python