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抓取网页正文的源码
Jun 11 Python
python开发中range()函数用法实例分析
Nov 12 Python
python如何在终端里面显示一张图片
Aug 17 Python
python实现微信定时每天和女友发送消息
Apr 29 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
Python循环实现n的全排列功能
Sep 16 Python
Django之form组件自动校验数据实现
Jan 14 Python
python操作yaml说明
Apr 08 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
如何获取numpy array前N个最大值
May 14 Python
Python os和os.path模块详情
Apr 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
在数据量大(超过10万)的情况下
2007/01/15 PHP
浅析php面向对象public private protected 访问修饰符
2013/06/30 PHP
php 字符串压缩方法比较示例
2014/01/23 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
php修改数组键名的方法示例
2017/04/15 PHP
php压缩文件夹最新版
2018/07/18 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
2019/07/26 PHP
简单的代码实现jquery定时器
2013/11/17 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
基于js实现的限制文本框只可以输入数字
2016/12/05 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
Vue单页面应用保证F5强刷不清空数据的解决方案
2018/01/31 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python实现的堆排序算法示例
2018/04/29 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python3实现字符串操作的实例代码
2019/04/16 Python
Python实现中值滤波去噪方式
2019/12/18 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
序列化Python对象的方法
2020/08/01 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
2016大一新生军训感言
2015/12/08 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
MySQL视图概念以及相关应用
2022/04/19 MySQL