2017-02-10 6 views
-1

誰かが私がPythonでカスタムスレッド内のどこにロックを入れることができるか教えてもらえますか?スレッドはカスタムスレッドのPythonでロックする

import threading 
lock = threading.Lock() 

class WorkerThread(threading.Thread): 
    def __init__(self,lock): 
     super(WorkerThread,self).__init__() 
     self.lock = lock 
    def run(self): 
     self.lock.acquire() 
     print "Hello World" 
     self.lock.release() 


worker = WorkerThread(lock) 

エラートレースバック:

Traceback (most recent call last): 
    File "<buffer>", line 14, in <module> 
    File "<buffer>", line 11, in __init__ 
AssertionError: release() of un-acquire()d lock 
+1

ロックをコンテキストマネージャーとして使用することで、人生をより簡単に(一般的な場合はより安全に)することができます。獲得と解放を 'with self.lock:'で置き換えることができます。ブロックの下に字下げされたものはすべて実行され、ロックが獲得され、ブロックが終了すると解放されます。 –

答えて

1

あなたが混在タブとスペースをしました。 runの定義のほとんどは実際には__init__の内部にネストされ、self.lock.release()は実際にはrunの外側と__init__の外側にあります。あなたのスレッドは、スレッド作成時にロックされていないロックを解放しようとします。

タブとスペースを混用しないでください。スペースに固執する。エディタで「空白を表示」をオンにすると、問題がより目立つようになり、エディタで編集できない場合は、より良いエディタが表示されます。 -ttフラグを指定してPythonを実行すると、これらのエラーをキャッチするのにも役立ちます。

関連する問題