Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么仍然存在“命令不同步;您现在无法运行此命令”错误_Python_Mysql_Mysql Python - Fatal编程技术网

Python 为什么仍然存在“命令不同步;您现在无法运行此命令”错误

Python 为什么仍然存在“命令不同步;您现在无法运行此命令”错误,python,mysql,mysql-python,Python,Mysql,Mysql Python,我正在使用Python mysqldb库连接mysql数据库。我有一个web服务器,有4个工作进程,其中1个conn和1个指向mysql数据库的游标。所以每个工作进程都将使用其连接/游标来执行sql语句 现在,我有几个客户端同时向服务器发送请求,服务器将查询mysql数据库,并向客户端返回一些结果。我遇到了错误。2014年,命令不同步;现在无法运行此命令 我已经检查了sql,只需从a=1的表中选择a、b、c即可。这里没有分号,也没有存储过程,我也按照建议尝试下面的代码。但这仍然是同样的错误 se

我正在使用Python mysqldb库连接mysql数据库。我有一个web服务器,有4个工作进程,其中1个conn和1个指向mysql数据库的游标。所以每个工作进程都将使用其连接/游标来执行sql语句

现在,我有几个客户端同时向服务器发送请求,服务器将查询mysql数据库,并向客户端返回一些结果。我遇到了错误。2014年,命令不同步;现在无法运行此命令 我已经检查了sql,只需从a=1的表中选择a、b、c即可。这里没有分号,也没有存储过程,我也按照建议尝试下面的代码。但这仍然是同样的错误

self.cursor.execute(sql, data)
self.conn.commit()
result = result + self.cursor.fetchall()
self.cursor.close()
self.cursor = self.conn.cursor() 

最后,我解决了这个问题。我的应用程序使用多线程来使用相同的连接,这似乎不是访问mysql的正确方式,所以当我不共享连接时,问题就消失了

在中的“螺纹安全”下:

MySQL协议不能使用同一个线程处理多个线程 立即连接。MySQLdb的一些早期版本使用了锁定 以实现2的线程安全性。虽然这并不难做到 使用使用 mysql\u存储\u结果,由于使用 mysql_使用_结果;对于后者,必须确保所有行都具有 在执行另一个查询之前已读取。更进一步 由于添加了事务而变得复杂,因为事务开始了 当游标执行查询,但在执行提交或回滚时结束 由连接对象执行。两个线程不能共享一个线程 事务正在进行时的连接,以及 能够在查询执行期间共享它。这太过分了 把代码复杂到了不值得的地步

这样做的总体结果是:不要在用户之间共享连接 线程。这真的不值得你或我的努力,最终, 可能会影响性能,因为MySQL服务器运行单独的 每个连接的螺纹。您当然可以做缓存之类的事情 池中的连接,并将这些连接一次性提供给一个线程 时间如果让两个线程同时使用一个连接,则 MySQL客户端库可能会死掉。你已经 警告


我知道这可能是一个愚蠢的问题,但您是否在命令之前而不是之后刷新光标?它似乎仍然存在此错误和其他一些错误。