2012-08-14 56 views
1

我打電話來加入,所以我不明白爲什麼主線程在所有線程完成之前都打印'End'。 輸出是:python - 爲什麼主線程在所有線程連接之前打印結束線

End 
Thread 
Thread 

其他相關的問題: 只是爲了確保如果設置守護標誌設置爲true,是它的意思是沒有意義的號召,加入(因爲主可以在有完成仍然守護線程)?

#!/usr/bin/env python 
import sys 
import threading 
from time import sleep 

num_worker_threads = 2     
threads = [] 

def worker(): 
    sleep(1) 
    print 'Thread' 

for i in range(num_worker_threads): 
    t = threading.Thread(target=worker) 
    threads.append(t) 
    t.start() 
    t.join 

print 'End' 
+1

它應該是t.join()我認爲.. – 2012-08-14 14:09:11

回答

4

因爲你實際上不打電話加入。替換:

t.join 

與:

t.join() 

的一點是,t.join表達式返回bound method對象,並添加括號使得表達是一個方法調用。

連接線程只對用戶線程很重要,守護進程線程不會阻塞主線程完成。

+0

WOW。愚蠢的我!!!!!第二個問題呢?我會將此標記爲答案。 – 2012-08-14 14:12:46

+2

你應該詳細說明_why_這是什麼,因爲這是一個有趣的教學點!一般來說,python函數需要一組括號。否則,你實際上是在引用方法本身。 OP是否意識到這一點? – rsegal 2012-08-14 14:13:36

+0

@rsegal爲什麼沒有括號沒有錯誤 – 2012-08-14 14:15:49

2

您在t.join後缺少括號。它應該是t.join()

相關問題