2016-10-27 9 views
0

私は同じクラスの2つのインスタンスを持ち、グローバルに宣言されたLock変数を持っています。Python Thread Loopメソッドはコードを続行しません

このクラスは、同じクラスの別のメソッドを実行するスレッドを作成します.RUN()メソッドを持って次のように私はいくつかのテストprint文を持っている

(これらの2つの方法は、質問の最後にあります)

[main.py]

first = className() 
second = className() 
print('test before first') 
first.run() 
print('test before second') 
second.run() 

と私の出力である:次のように自分のコードで

[出力]

test before first 
first Thread lock acquired by first 
first Thread lock released (will sleep now) 
first Thread lock acquired by first 
first Thread lock released (will sleep now) 

と、それはそれはミューテックス 'threading.Lockを()' を使用して、リソースのために競合する別のスレッドを起動する必要があり、このラインになることはありません:

[main.py]

print('test before second') 
実行

クラスメソッド:

[className.py]

def run(self): 
    tr = threading.Thread(target= self.update()) 
    tr.start() 
    return True 

def update(self): 
    while(True): 
     try: 
      global lock 
      lock.acquire() 
      print('first Thread lock acquired by ' + self.name) 
      #do stuff 
      lock.release() 
      print('lock release') 
      sleep(2) 
     except: 
      sleep(5) 

答えて

0

runメソッドの2行目で、ターゲット値はカッコのないメソッド名にする必要があります。

def run(self): 
    tr = threading.Thread(target= self.update) 
    # Instead of: 
    tr = threading.Thread(target= self.update()) 
    tr.start() 

違いは、オリジナルのもので、TRの変数は、メソッドからの結果を待ちますされ、終了しないでしょう。 正しいものでは、trの実行が開始され、プログラムは続行されます。

+0

あなた自身の質問に答えていますか? – MooingRawr

+0

はい、私は質問を終えている間にそれを理解しました。だから私はオプションを選択した "あなた自身の質問に答えて - あなたの知識、Q&Aスタイルを共有する" –

関連する問題