2017-09-27 4 views
1

下の例では、タイマーは、タイマースレッドがタイマーとして機能するようにするにはどうすればいいですか(「こんにちはワールド」)、プログラムの進行を止めないで、タイマースレッドを5秒おきに0,にしています。すべてのPython:スレッドの中でプログラムの流れを止めてしまうのを避けるには?

import threading 
class Timer_Class(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.event = threading.Event() 
     self.running = True 
    def run(self, timer_wait, my_fun, print_text): 
     while self.running: 
      my_fun(print_text) 
      self.event.wait(timer_wait) 

    def stop(self): 
     self.running = False 




def print_something(text_to_print): 
    print(text_to_print) 


timr = Timer_Class() 
timr.run(5, print_something, 'hello world') 
timr.stop() # How can I get the program to execute this line? 

答えて

2

まず:

while self.running: 

あなたのコードは、ループ状態self.runningまでループし続けますループが含まれていますが何とかFalseに変更です。

ループしたくない場合は、ループ内のコードを削除することをお勧めします。

あなたはではありません。あなたのスレッドオブジェクトにはstart()が呼び出されています。したがって、あなたはの現在のコードはすべてのメインスレッドです。複数のスレッドを実際に使用するには、ある時点でtimr.start()に電話する必要があります。

realここで答えてください。マルチスレッドがPythonでどのように機能するかを学んでください(例えば、hereのように見えます)。あなたはいくつかのコンセプトを聞いて試行錯誤しているようです。それは非常に非効率的な戦略です。

+0

こんにちは、上記のコードは、stackoveflowの質問で採用されましたhttps://stackoverflow.com/a/9812806/157416 これは、投票が高いと思われる。私は、コードは、私はメインスレッドからループを切断しようとしているスレッディングでは、しかし、望ましい結果であるループを作成している知っている。 OPはこれを達成する方法を求めている。あなたが提供したリンクを見ていきます。しかし、あなたの答えは、私がこれまでに知っていることを説明することだけです。ありがとうございました – Mohammad

+0

そして、例のコードにある** start()**呼び出しを見逃しました。そういう観点から、単純に後退し、私の答えがあなたの問題を解決したかどうかを検討してください。もしそうなら、受け入れることについて親切に考えてください。または、あなたがそこに着くために何が欠けているかを教えてください。 – GhostCat

+0

私はstart()コールにお世話になります。 – Mohammad

関連する問題