2012-03-29 4 views
0

現在のスレッド設計に関する質問があります。現在のプロセスは新しいスレッドを生成し、終了条件までメインスレッドを継続します。プロセスは、すべてのスレッドが終了するまで待機してから終了します。私が抱えている問題は、新しいスレッドが生成されるたびに以前に生成されたスレッドが完了したかどうかを確認する必要があることです。単にキューを設定し、すべてのタスクを処理するスレッドを1つだけ使用する必要がありますか?または、スレッドを生成することは可能ですか?以前のスレッドが完了したかどうかをチェックし、問題のスレッドが完了した後にのみそのタスクを処理しますか?あなたの助けPythonのマルチスレッド設計の提案

+1

脇に:マルチスレッドCPythonアプリケーションの有効性に重大な影響を及ぼすグローバルインタープリタロック(GIL)について知っておくべきです –

答えて

4

ため

感謝さておき最初の「メイン」スレッドからスレッドのすべてを順次実行するようになっている場合は、[はい、あなたはタスクキューと、単一のワーカースレッドを使用する必要があります。

Queueは、この作業に役立ちます(待ち行列に入れられたすべてのタスクが完了するのを待つ必要がある場合は、メインスレッドが.join()になります)。

0

Geventをご覧ください。
複数のGreenletオブジェクトをいくつか作成できます。
それぞれのニワトリはgreen threadです。

 
from gevent import monkey 
monkey.patch_all() 
import gevent 
from gevent import Greenlet 

class Task(Greenlet): 
    def __init__(self, name): 
     Greenlet.__init__(self) 
     self.name = name  
    def _run(self): 
     print "Task %s: some task..." % self.name 

t1 = Task("task1") 
t2 = Task("task2") 
t1.start() 
t2.start() 
# here we are waiting all tasks 
gevent.joinall([t1,t2]) 
関連する問題