2017-12-01 1 views
0

내가 이벤트 객체를 기다리라고 말한 후에 왜 아래 코드의 while 루프가 계속 실행되는지 궁금합니다.파이썬 스레드가 대기하는 동안 계속 실행되는 이유는 무엇입니까?

import threading, time 
msg = threading.Event() 

def sec(): 
    print "second thread starting now.." 
    counter = 0 

    while True: 
    #while msg.isSet(): 
     print "hello" 
     print counter 
     counter += 1 
     time.sleep(3) 
     msg.wait() 

secThread = threading.Thread(target = sec) 
secThread.start() 

print "a" 
msg.set() 
time.sleep(5) 
print "b" 
msg.set() 

와 나는 루프 동안 내가 주석 밖으로 문제를 해결할 수있는 다음과 같은 출력을

second thread starting now..a 

hello 
0 
hello 
1 
b 
hello 
2 
hello 
3 
.... 
(keeps going) 

를 얻을,하지만 난 여전히 실행 이유에 궁금 하군요. 주 스레드는 실행 완료이므로 두 번째 스레드가 실행될 수 있도록 스레드 이벤트를 설정해야합니다.

감사합니다.

답변

2

msg이 설정되었으므로 (사용자가 설정 했으므로) 루프를 대기 할 필요가 없습니다. 루프를 대기 상태로 만들려면 해당 이벤트에서 clear으로 전화하십시오. 원할 경우 msg.wait 반품 후 루프 전화 msg.clear()을 만들 수 있습니다.

+0

알 수 있습니다. 나는 "기다림"이 깃발을 다시 놓을 것이라고 생각하는 실수를 범했지만, 그렇지 않습니다. 다시 플래그를 재설정하려면, 당신이 말한 것처럼 분명히 사용해야합니다. – Arrow