2011-07-20 24 views
1

簡而言之:在線程內部產生線程是一個標準過程,還是應該儘可能避免這種情況?在線程內部產生線程是標準還是錯誤的練習?

一個例子:想一下並行蜘蛛一次檢索和解析多個文檔。 在我的推理中,所討論的蜘蛛需要兩個線程(FetcherPool,ParserPool)產生Fetcher和Parser工作線程,以使所有的工作併發(見下文)。

例子:

Main Thread 
|------FetcherPool 
|  |------Fetcher 
|  |------Fetcher 
| 
|------ParserPool 
     |------Parser 
     |------Parser 

乾杯

回答

2

不 - 因爲你不能產卵從別的線程。你在腳本中產生的第一個線程是從「主」線程產生的。如果你在一個非多線程應用程序中執行「Thread.current」,你會得到這個主線程。 「Thread.main」也返回它。

但是,如果你的問題是關於從「主」以外的線程產卵,我不認爲這有什麼固有的壞。爲了您自己(或您的團隊)的理智,您應該設計線程管理,以便工作人員不會失控(例如產卵超出您的預期)。應該考慮代碼可讀性和控制對共享資源的訪問。

下面是關於多線程的問題一篇有趣的文章:http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf

在一般情況下,這是一個好主意,你的線程封裝成對象並調用這些方法。它使代碼更易於理解。

+0

我意識到這有點晚了。我仍然想感謝你的偉大答案。你在保持代碼簡單方面做得很好。 – deRailed

+0

@deRailed不客氣。另外一件我忘記提到的內置'Queue'(及其子類'SizedQueue')對安全的線程間通信非常有幫助。我還建議您閱讀'Monitor'和'MonitorMixin'。 – Kelvin