2016-10-18 3 views
0

저는 파이썬 프로그래밍과 동시성을 처음부터 충분히 다루기에 새롭기 때문에 어떤 용어라도 용서해주십시오.파이썬 : 두 스레드가 완료 될 때까지 함수의 실행을 멈추는 방법

내 프로그램은 "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() 

는 기본적으로 프로그램이 온/오프 패턴을 다른과 불을 전환하는 동시에 두 개의 릴레이 스위치 :

다음은 내 코드입니다.

스레딩 이외의 다른 방법이 있다면 알려주십시오.

많은 감사,

+0

이 할 이유는 단지 하드 타임 아웃 이후

폴? – 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)"을 추가하십시오. 감사합니다. :) –

관련 문제