Python django使用多进程连接mysql错误的解决方法
问题
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查询。
我测试了下不实用多进程的情况没有问题,使用多进程就会出现这个问题。
对照上面的文档,其实不难想到,错误应该是这样的
- 父进程和mysql建立的连接A,循环中fork出一个子进程
- 子进程保持了父进程的变量,也就是拥有mysql连接A
- 子进程去用连接A查询mysql,父进程这个时候也并发的使用连接A访问mysql
- 这样很容易出现了上面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 连接。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
在python3环境下的Django中使用MySQL数据库的实例
我们在使用Django过程中,数据库往往是离不开的,比较长常用的是MySQL数据库,但在使用过程中,对Python不同的版本对用的库也不一样,用惯了Python2的人在使用Python3时经常会遇到下面的错误: Error loading MySQLdb module: No module named 'MySQLdb'. 这是因为Python3 MySQL的支持库为pymysql所致,所以我们要下载pymysql数据库. 并且在站点文件夹下的__init__.py(project同名目录下,而
-
Python Django切换MySQL数据库实例详解
准备 软件 版本 Django 2.1.3 Python 3.7.1 默认使用的是sqlite3 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } } 切换为MySql: # settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys
-
Python的Django框架中使用SQLAlchemy操作数据库的教程
零.SQLAlchemy是什么? SQLAlchemy的官网上写着它的介绍文字: SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. SQLAlchemy 是一个非常强大的ORM和数据库工具,但是它庞大的文档和复杂的功能总是让很 多人望而生畏.而Django的ORM相对来说
-
python django 增删改查操作 数据库Mysql
下面介绍一下django增删改查操作: 1.view.py # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import HttpResponse from polls.models import Test from django.shortcuts import render # Create your views here. # 解决乱码 import sys reload(sy
-
python django 原生sql 获取数据的例子
如下所示: node2:/django/mysite/blog#cat views.py 1, # -*- coding: utf-8 -*- from __future__ import unicode_literals # from django.shortcuts import render, render_to_response from .models import * # Create your views here. from django.http import HttpResp
-
python Django连接MySQL数据库做增删改查
1.下载安装MySQLdb类库http://www.djangoproject.com/r/python-mysql/2.修改settings.py 配置数据属性 复制代码 代码如下: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'djang
-
Python django使用多进程连接mysql错误的解决方法
问题 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. Thi
-
执行Django数据迁移时报 1091错误及解决方法
问题描述 今天在Pycharm 中的Terminal下,执行数据迁移操作时,第一步: Python manage.py makemigrations ,是没有任何问题,但就是在执行真正的数据迁移时,也就是第二步:Python manage.py migrate 时,报错,错误截图如下 大概的意思就是 错误代码1091,原因是 "无法删除'dt_id':请检查列/键是否存在". 问题的解决 分析: 可能是数据库中的字段结构,已经完成了对此字段的修改,但是在执行数据迁移的时候,生成的
-
Python 连接 MySQL 的几种方法
尽管很多 NoSQL 数据库近几年大放异彩,但是像 MySQL 这样的关系型数据库依然是互联网的主流数据库之一,每个学 Python 的都有必要学好一门数据库,不管你是做数据分析,还是网络爬虫,Web 开发.亦或是机器学习,你都离不开要和数据库打交道,而 MySQL 又是最流行的一种数据库,这篇文章介绍 Python 操作 MySQL 的几种方式,你可以在实际开发过程中根据实际情况合理选择. 1.MySQL-python MySQL-python 又叫 MySQLdb,是 Python 连接 M
-
Navicat连接MySQL错误描述分析
本地使用Navicat连接 错误描述 2013-Lost connection to MySQL server at 'reading initial communication packet', system error:0 "Internal error/check (Not system error)" 解决方案 cd /etc/mysql/mysql.conf.d/ sudo vim mysqld.cnf 注释红框内容 重启MySQL服务 再次测试连接 环境 虚拟机版本 MyS
-
Python基于ssh远程连接Mysql数据库操作
目录 背景 安装支持库 连接Mysql 自定义查询函数 背景 如果需要访问远程服务器的Mysql数据库,但是该Mysql数据库为了安全期间,安全措施设置为只允许本地连接(也就是你需要登录到该台服务器才能使用),其他远程连接是不可以直接访问,并且相应的端口也做了修改,那么就需要基于ssh来连接该数据库.这种方式连接数据库与Navicat里面界面化基于ssh连接一样. Navicat 连接数据库 安装支持库 如果要连接Mysql,首先需要安装pymysql pip install pymysql 安
-
Navicat连接mysql报错1251错误的解决方法
本文为大家分享了Navicat连接mysql报错1251错误的解决方法,供大家参考 错误提示 出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决办法:把mysql用户登录密码加密规则还原成mysql_native_password. 步骤: 1.打开cmd命令窗口,输入命令 mysql -uroot -p 打开MySQL数据库,然后输入密码进行登录. 2.修改加密规则 将加
-
Python3.6实现连接mysql或mariadb的方法分析
本文实例讲述了Python3.6实现连接mysql或mariadb的方法.分享给大家供大家参考,具体如下: python3.6的安装查看前面一篇文章//www.jb51.net/article/108938.htm mysql或mariadb数据库的安装查看以前的相关文章,这里不再赘述 首先在mariadb数据库中创建相应的库和表: MariaDB [(none)]> create database oracle default character set utf8 default collat
-
mysql启动失败之mysql服务无法启动(服务没有报告任何错误)的解决方法
目录 错误提示 尝试以下步骤,最终解决问题: 总结 错误提示 My SQL server8.0 安装后,启动失败,提示信息如下: 尝试以下步骤,最终解决问题: 1 查看host文件(C:\Windows\System32\drivers\etc\hosts),是否修改过本地域名,如果将localhost对应的地址修改过,有可能会导致连接mysql server失败. 解决方法:将localhost映射的地址注释掉 2 如果在mysql的安装路径(C:\Program Files\MySQL\My
-
在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误的解决方法
1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: sudo dpkg -i mysql-workbench-community-6.3.8-1ubu1604-amd64.deb 提示:未安装软件包 libpng12-0. 然而使用sudo apt-get -f install后还是报错,后来找到下载libpng12-0的地址并安装. 2.下载安装libpng12-0 下载libpng12-0地址:
-
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
可能很多人遇到过这个错误,当使用setup.py安装python2.7图像处理模块PIL时,python默认会寻找电脑上以安装的vs2008.如果你没有安装vs2008,会出现Unable to find vcvarsall.bat错误. 那么如何解决这个错误呢?以下就是这个错误的解决办法. 你可以通过设置VS90COMNTOOLS环境变量来引导python去识别一个新的vs.然后再执行setup.py继续完成安装. 如果你安装了vs2010,在cmd中执行: SET VS90COMNTOOLS
随机推荐
- Mootools 1.2教程 设置和获取样式表属性
- vue.js声明式渲染和条件与循环基础知识
- Java编程GUI中的事件绑定代码示例
- javascript 兼容FF的onmouseenter和onmouseleave的代码
- js AspxButton的客户端操作
- ASP.net Substitution 页面缓存而部分不缓存的实现方法
- PHP简单实现HTTP和HTTPS跨域共享session解决办法
- 防止网站内容被小偷采集的ASP代码
- FloatingActionButton增强版一个按钮跳出多个按钮第三方开源之FloatingActionButton
- vue指令以及dom操作详解
- asp #include file 与 #include virtual 的区别小结第1/2页
- SQL server中字符串逗号分隔函数分享
- jQuery中[attribute^=value]选择器用法实例
- 图片连续滚动代码[兼容IE/firefox]
- 详解如何在 CentOS7.0 上搭建DNS 服务器
- 让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
- 改写ThinkPHP的U方法使其路由下分页正常
- Java Clone深拷贝与浅拷贝的两种实现方法
- Android使用网络获取定位的方法
- Java 堆内存溢出原因分析