0

MySQL DBに対して読み取り/書き込みを行うマルチスレッドのPythonアプリケーションを作成しています(MySQLDBとlibmysqlclient_r-スレッドセーフライブラリを使用)。

ある時点で(理由や時期がわからない)、スレッドの1つがスタックしました。

#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()が返されない理由はありますか?それはたまに起こります。

ノート!このDBに接続し、クエリ/実行するスレッドは約6つあります。

それは悪いクエリ文字列である可能性がありますか?APIの不適切な使用法?

4

1 に答える 1

0

スレッド間で単一の接続を共有している場合、それが問題です。MySQL クライアント ライブラリ/プロトコルでは、それが許可されていません。各スレッドに独自の接続を安全に与えることができ、それらは互いにブロックしません。

于 2012-09-21T18:19:05.753 に答える