2013-07-22 44 views
1

上下文:我有一個簡單的python腳本,每隔幾秒將一堆文件寫入s3(〜70-100)。由於其I/O限制,我想要對寫入過程進行線程處理,以便腳本執行得更好。我使用threading來建立我的線程。非守護進程Python線程完成任務後會退出嗎?

問題:由於我的線程一)非守護進程和b),他們只有1個任務來執行(寫入文件),如果我圈在我的線程列表和電話.join()他們將完成他們的任務,優雅地退出?我甚至需要在這裏撥打join(),或者他們在完成後纔會退出?我相信加入()是去這裏的路,但因爲我很新的蟒蛇,我不知道是什麼我不知道....

下面是一些供參考的簡化代碼:

buildOutput() #calls the section below 
for thread in threads: 
    thread.join() 
time.sleep(60) 

電話:

for item in out[fileRoot]: 
     #write individiual files 
     key = findKey(item, FILE_KEY) 
     full_key = FILE_PATH + str(key) + FILE_TYPE 
     t = FileWriter(item, full_key) 
     t.start() 
     threads.append(t) #global threads list for the script 

其中的FileWriter是不會寫的類。

回答

1

加入確保主線程將等待連接的線程完成其任務。有一個很好的ASCII藝術給予here

所以你最好在你的子線程正在執行I/O時使用連接來防止任何意外的行爲。

+0

沒錯,但是當線程完成任務後會發生什麼?有沒有什麼機制可以確保沒有任何東西像殭屍進程或垃圾回收問題那樣浮動?類似的東西? – Brad

+0

像其他任何方法一樣處理,從堆棧中刪除。由於我們正在討論線程,因此就像你說的完成任務一樣,不會有任何殭屍進程。但是,如果沒有連接,如果主線程退出而另一個沒有完成,它們的堆棧將保持(不好)。 – sgun

+0

明白了。謝謝澄清 – Brad

相關問題