2016-10-18 9 views
0

私はPythonプログラミングと同時実行性を初めて使い始めるのに十分新しいので、何かを許してください。Python:2つのスレッドが完了するまで関数の実行を停止する方法

私のプログラムは2つのスレッドを起動し、それぞれ関数 "lightshow()"を呼び出すが、プログラムが両方のスレッドが完了するまで実行を停止するのではなく、コードの次の行に移動する。

両方のスレッドが完了するまでプログラムを「一時停止」することはできますか?

import time 
import threading 
from threading import Thread 

# Handshake pulse on GPIO2 of 4 50ms highs 

def setup(): 
     for pulse in range(5): 
       hs.on() 
       sleep(0.05) 
       hs.off() 
       sleep(0.05) 
     print('handshake comlete') 

def lightshow(sequence, relay): 
     t_end = time.time() + 60*1 
     while time.time() < t_end: 
       print('starting timer') 
       # iterate over the dictionary's keys and values 
       for key, value in sequence.items(): 
         relay.on() 
         sleep(key) 
         relay.off() 
         sleep(value) 



setup() #send handshake to board to prime it. 


t1 = threading.Thread(target = lightshow, args=(flickerRGB, relay1)) 
t2 = threading.Thread(target = lightshow, args=(flickerWhite, relay2)) 

t1.start() 
t2.start() 

#send handshake to Relay board to reset it 
setup() 

は、基本的にはプログラムが/オフパターンに異なると照明のスイッチを同時に2つのリレーを切り替え:

は、以下の私のコードスニペットです。

スレッディング以外の方法がある場合は、教えてください。

多くのおかげで、

ポール

+0

は、次の2つのスレッドの前にセットアップを行うにはしたくないではない、なぜそのわずか、ハードコードのタイムアウト以来? – stark

+0

はい、setup()は、リレーボードにパルス列を送信してプライミングしてリレーにアクセスできるようにします。また、プログラムの最後にsetup()を呼び出してリレーボードをリセットします。 –

答えて

1
#send handshake to Relay board to reset it 
t2.join() #block until thread exits 
setup() 

ちょうど

time.sleep(61) 
+0

こんにちはジョラン、助けてくれてありがとう。私は最初の答えを理解していますが、それに従わないのですが、そのハードコーディングされたタイムアウト以来なぜ time.sleep(61) "初心者のために説明してください。 –

+1

@Tullio_IRL - 両方のスレッドが60秒後に終了するwhileループを実行しています。したがって、両方のスレッドは61秒のマークで終了したとみなすことができます。 –

+0

さて、私は今、それを得るので、スレッドを開始した後、 "time.sleep(61)"を追加してください、ありがとうございます:) –

関連する問題