2012-05-23 50 views
0

我正在寫一個多線程的Python應用程序,讀/寫MySQL數據庫(使用MySQLDB和libmysqlclient_r-線程安全庫)。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使用不當?

回答

0

如果您在線程之間共享單個連接,那就是問題所在。 MySQL客戶端庫/協議不允許這樣做。您可以安全地爲每個線程提供自己的連接,並且不會彼此阻塞。