为什么还有“命令不同步;您现在无法运行此命令”错误

时间:2015-09-24 07:20:30

标签: python mysql mysql-python

我使用Python mysqldb库来连接mysql db。我有一个带有4个工作进程的Web服务器,它具有 1个conn和1个游标到mysql db。所以每个工作进程都会使用它的连接/游标来执行sql语句。

现在,我有几个客户端同时向服务器发送请求,服务器将查询mysql db,并将一些结果返回给客户端。我遇到错误。 2014,“命令不同步;您现在无法运行此命令”
我检查了sql,它只是简单SELECT a, b, c from table WHERE a = 1。没有分号或商店程序,我也尝试下面的代码Python, "commands out of sync; you can't run this command now"建议。但它仍然是同样的错误。

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

1 个答案:

答案 0 :(得分:3)

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

  

MySQL协议无法使用相同的处理多个线程   立刻连接。一些早期版本的MySQLdb使用了锁定   实现2的线程安全。虽然这不是非常难   完成使用标准的Cursor类(使用   mysql_store_result()),由SSCursor复杂化(使用   了mysql_use_result();对于后者,您必须确保所有行都有   在执行另一个查询之前已被读取。它是进一步的   由于交易开始,因此增加了交易   当游标执行查询时,但在COMMIT或ROLLBACK结束时结束   由Connection对象执行。两个线程根本无法共享一个   事务正在进行中的连接,除此之外   能够在查询执行期间共享它。这个过分了   将代码复杂化到不值得的地步。

     

这样做的一般结果是:不要分享之间的联系   线程。这真的不值得你的努力或我的努力,最后,   可能会损害性能,因为MySQL服务器单独运行   每个连接的线程。你当然可以做像缓存这样的事情   池中的连接,并将这些连接提供给a处的一个线程   时间。如果让两个线程同时使用连接,那么   MySQL客户端库可能会崩溃并死掉。你去过   警告。