0

我正在编写一个读/写 MySQL DB 的多线程 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 个不同的线程连接到该数据库并在其上查询/执行。

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

4

1 回答 1

0

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

于 2012-09-21T18:19:05.753 回答