私は現在、デッドロックに苦しんでいるマルチスレッドのPythonプログラムを持っています。私はthreading.Lockオブジェクトをサブクラス化することで取得したロックをログに記録するつもりだった:私はプログラムを実行しようとするとPythonでLock()オブジェクトをサブクラス化することは可能ですか?そうでない場合、デッドロックをデバッグする他の方法はありますか?
import traceback
class DebugLock(threading.Lock):
def acquire(self):
print >>sys.stderr, "acquired", self
#traceback.print_tb
threading.Lock.acquire(self)
def release(self):
print >>sys.stderr, "released", self
#traceback.print_tb
threading.Lock.release(self)
は、私は次のエラーを取得する:
class DebugLock(threading.Lock):
TypeError: Error when calling the metaclass bases
cannot create 'builtin_function_or_method' instances
だから、私の質問は二つある:
Lockオブジェクトをサブクラス化して、自分のやることはできますか?
もしそうでなければ、デッドロックをPythonでデバッグする最良の方法は何ですか?
注:私はPython拡張機能を書いていません。同様の質問があります:How to debug deadlock with python? しかし、C++コードのコンパイルとGDBの使用について扱っています。私のコードは純粋なPythonであるため、できません。
ありがとうございました。 – jmite