2013-04-19 3 views
1

나는 queue.join()을 사용하면 종료되지 않는 간단한 파이썬 응용 프로그램을 가지고 있습니다.Python 스레딩 응용 프로그램이 종료되지 않습니다.

import threading 
import Queue 

q = Queue.Queue() 

for i in range(5): 
    q.put("BLAH") 

def worker(): 
    while True: 
     print q.qsize() 
     a = q.get() 
     print q.qsize() 
     q.task_done() 
     print q.qsize() 


for i in range(2): 
    t = threading.Thread(target=worker()) 
    t.daemon = True 
    t.start() 

q.join() 

나는 또한 인쇄의 threading.enumerate는(), 다음 2 초 자고있는 감시 스레드를 만들었습니다 아래는 코드입니다. 남아있는 유일한 스레드는 MainThread이고 큐 크기는 사실 0입니다.이 스크립트는 절대로 종료되지 않습니다. Ctrl + z를 누른 다음 죽여야합니다. 무슨 일이야?

+1

스레드 변경을 't = threading.Thread (target = worker)'로 변경합니다. – mtadd

답변

1
t = threading.Thread(target=worker) 

작업자 함수에 대한 참조를 전달하려면 호출하지 말아야합니다.

0

작업자 함수가 종료되지 않으므로 결합하지 않습니다. 둘째 스레드 대기열에 가입하려고합니다.

저는 파이썬 스레딩 전문가는 아니지만 큐는 스레드간에 전달되는 데이터에만 사용됩니다.

+1

파이썬의'Queue'는 실제로 대기열에있는 모든 항목이'task_done '. 또한 데몬 스레드가 사용되므로 데몬 스레드가 계속 실행 중이더라도 주 응용 프로그램을 종료 할 수 있습니다. –

관련 문제