2011-07-20 11 views
1

要点:スレッド内のスレッドを標準的な手順にしていますか、可能であればこれを避けるべきですか?スレッド内にスレッドを生成するのが標準か悪いのですか?

例:複数のドキュメントを一度に取得して解析する並列スパイダーを考えてみましょう。 私の考えでは、問題のスパイダーは、すべてを同時に動作させるために、フェッチャースレッドとパーサースレッドを生成する2つのスレッド(FetcherPool、ParserPool)が必要です(下記参照)。

例:

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

乾杯

答えて

2

ありません - あなたは何か他のものからスレッドを生成することはできませんので。あなたのスクリプトで生成する最初のスレッドは、「メイン」スレッドから生成されます。非マルチスレッドアプリケーションで "Thread.current"を実行すると、このメインスレッドが取得されます。 「Thread.main」もそれを返します。

しかし、あなたの質問が「main」以外のスレッドから生成することについてあれば、それについて本質的に悪いことはありません。あなた自身の(またはあなたのチームの)健全性のために、スレッド管理を設計して、従業員が制御不能にならないようにする必要があります(例えば、意図した以上に産卵するなど)。コードの可読性と共有リソースへのアクセスを制御することも考慮する必要があります。それは、オブジェクトにあなたのスレッドをカプセル化し、ちょうどそれらのメソッドを呼び出すことをお勧めします、一般的にはhttp://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-1.pdf

はここでマルチスレッドに関する問題についての興味深い記事です。コードを理解しやすくします。

+0

これは少し遅れていることがわかりました。あなたの偉大な答えに感謝したいと思います。あなたはコードを単純に保つことについて良い点を作っています。 – deRailed

+0

@deRailedよろしくお願いします。私が言及していたことを忘れたもう1つのことは、組み込みの 'Queue'(およびそのサブクラス' SizedQueue')は安全なスレッド間通信に非常に役立ちます。私は 'Monitor'と' MonitorMixin'を読むことをお勧めします。 – Kelvin

関連する問題