2016-11-20 1 views
0

난 그냥 파이썬에 대해 배우기 시작하고 LED를 깜박이는 프로젝트에 문제가있다. 새 메시지를 받고 새 스레드를 시작할 때. 이전 스레드가 계속 실행 중입니다. 오래된 스레드를 죽이고 새 스레드를 시작하고 싶습니다. 내 문제를 해결하는 방법? (나는 영어 잘 모르겠지만 내가 노력하고 있다면 죄송합니다) 는오래된 스레드를 죽이고 새로운 스레드를 시작하는 방법?

def led_action(topic,message): 
    print topic+" "+message 

    if message == 'OFF': 
     #state = False 
     print ("Stoping...") 
     while message == 'OFF': 
      GPIO.output(8,GPIO.LOW) 

    elif message == 'ON': 
     #state = True 
     print ("Opening...") 
     while message == 'ON': 
      GPIO.output(8,GPIO.HIGH) #Set LED pin 8 to HIGH 
      time.sleep(1)   #Delay 1 second 
      GPIO.output(8,GPIO.LOW)  #Set LED pin 8 to LOW 
      time.sleep(1) 

# Get message form NETPIE and Do something 
def subscription(topic,message): 
    set = thread.start_new_thread(led_action, (topic,message)) 

def connection(): 
    print "Now I am connected with netpie" 

def disconnect(): 
    print "disconnect is work" 

microgear.setalias("test") 
microgear.on_connect = connection 
microgear.on_message = subscription 
microgear.on_disconnect = disconnect 
microgear.subscribe("/mails") 
microgear.connect(True) 
+0

만약'message'가''ON '' 또는''OFF''이라면 당신의 스레드 함수는 무한 루프에 빠지게됩니다. 함수가 돌아 오면 실행중인 스레드가 종료됩니다. 종료 할 시간 내에 코드를 알리는 방법을 제공하지 않으면 실행중인 스레드를 중지 할 수있는 방법이 없습니다. 예를 들어,이 [이 답변] (http://stackoverflow.com/a/15734837/355230). 귀하의 답변에 대해 – martineau

답변

-1

종료 함수에 필요한 파이썬 스레드를 종료합니다. 수표 인 while message == 'ON'/'OFF' 개를 삭제하면됩니다. 메시지는 어쨌든 변경되지 않으므로 (기능 led_action으로 전달됨) 이러한 검사는 필요하지 않습니다.

+0

주셔서 감사합니다. 메시지 == '꺼짐'동안 제거 할 수 있지만 메시지가 == '꺼짐'때까지 LED 깜박임이 필요하므로 메시지 == '켜짐'동안 설정해야합니다. – Pangpoon1994

관련 문제