MySQLdb - libmysqlclient_r卡在read()上

时间:2012-05-23 09:25:07

标签: mysql pthreads python-2.7 mysql-python libmysql

我正在编写一个读取/写入MySQL数据库的多线程python应用程序(使用MySQLDB和libmysqlclient_r - 线程安全库)。

在某些时候(不确定为什么或何时),其中一个线程卡住了。

#0  0x00007f6c124ad14d in read () from /lib/libpthread.so.0
#1  0x00007f6c0d78f759 in vio_read_buff () from /usr/lib/libmysqlclient_r.so.16
#2  0x00007f6c0d79086f in ?? () from /usr/lib/libmysqlclient_r.so.16
#3  0x00007f6c0d790c75 in my_net_read () from /usr/lib/libmysqlclient_r.so.16
#4  0x00007f6c0d78afca in cli_safe_read () from /usr/lib/libmysqlclient_r.so.16
#5  0x00007f6c0d78b7a9 in ?? () from /usr/lib/libmysqlclient_r.so.16
#6  0x00007f6c0d789adc in mysql_real_query () from /usr/lib/libmysqlclient_r.so.16
#7  0x00007f6c0db24aad in ?? () from /usr/lib/pymodules/python2.6/_mysql.so
#8  0x00000000004a7ba5 in PyEval_EvalFrameEx ()
#9  0x00000000004a84a0 in PyEval_EvalFrameEx ()

知道为什么read()不返回?它偶尔发生一次。

请注意!大约有6个不同的线程连接到此DB并在其上查询/执行。

可能是一个错误的查询字符串吗? API使用不当?

1 个答案:

答案 0 :(得分:0)

如果您在线程之间共享单个连接,那就是问题所在。 MySQL客户端库/协议不允许这样做。您可以安全地为每个线程提供自己的连接,并且它们不会相互阻塞。