2016-04-08 19 views
0

最初に私はビデオを見ていて、スレッドを動作させる方法を理解するために努力していますが、私はそれを理解できません。私は誰かが私の特定の状況で私のためにこの仕事をすることができ、私はそれから学ぶことができるか、少なくともそれが私のために働くことを願っています。Pythonは特定の関数をスレッド化する必要があります

start_timer関数をスレッドプロセスにして、この1つが実行されている間にユーザーが他の関数を起動できるようにします。

最終的に各機能はtkinterのボタンに関連付けられ、私の庭の水分を制御するためにラズベリーパイに情報を送信します。

import time 


class Valve: 

    def __init__(self, pin, location): 
     self.pin = pin 
     self.location = location 

    timer = 0 
    status = False 

    def turn_on(self): 
     self.status = True 
     self.send_info() 

    def turn_off(self): 
     self.status = False 
     self.send_info() 

    def set_timer(self, minutes): 
     self.timer = minutes * 60 

    def start_timer(self): 
     self.turn_on() 
     self.status = True 
     while self.timer > 0: 
      print(self.timer) 
      self.timer -= 1 
      time.sleep(1) 
     self.turn_off() 


    def send_info(self): 
     print("sending this info to server:", self.pin, self.status) 

hose1 = Valve(1, 'Garden') 
hose2 = Valve(2, 'Lawn') 


hose1.set_timer(1) 

hose1.start_timer() 

hose2.turn_on() 

は、私は以下で)(hose1.start_timerを交換して働くだろうと思ったが、それはまだ実行されます()hose2.turn_on前にこの穴のプロセスを実行します:

は、ここに私のコードです。

thread = threading.Thread(target=hose1.start_timer(), args=hose1.timer) 
thread.start() 

ありがとうございました!

もし誰かがこのプロジェクトに興味を持っているなら、私はこのアイデアを作り出す際に、アイデアを前後に跳ね返すパートナーが大好きです。

答えて

0

スレッドを間違って呼び出しています。

あなたはプログラムがない場合、スレッドが終了する場合は、これはTkinterのであるから、その可能性が最も高いルートウィンドウになり

thread = threading.Thread(target=hose1.start_timer, args=(hose1.timer,)) 

または

thread = threading.Thread(target=lambda: hose1.start_timer(), args=(hose1.timer,)) 

を使用する必要があります。

あなたはthread.daemon = Trueを使用して、デーモンするスレッドを設定することができ、その後、あなたは

+0

thread.start()私はトップ1を使用し、私は任意の引数を必要としなかったとして、私はそれを取り除くので、私は完全に脳がおなら気づき、今それを呼び出すことができます働いているようだ! – JayEli

関連する問題