10 個のプロセスを開く必要があり、そのうちの 1 つが終了するたびに、数秒待ってから別のプロセスを開始したいと考えています。それはかなり単純に思えますが、どういうわけか私はそれを機能させることができません。
1261 次
2 に答える
2
何を達成しようとしているのかは 100% 明確ではありませんが、具体的にはワーカーのプールを使用してmultiprocessing
、モジュールを見ましたか?
于 2010-03-17T18:29:06.413 に答える
1
セマフォを使用して Web 統計を処理するために、これと同じことを行いました。基本的に、プロセスが作成されると、セマフォがインクリメントされます。それらが終了すると、デクリメントされます。セマフォがブロックされると、作成プロセスがブロックされます。
これは実際にスレッドを起動し、実行パスを少し下って外部プロセスを実行します。
これが例です。
thread_sem = threading.Semaphore(int(cfg.maxthreads))
for k,v in log_data.items():
thread_list.append(ProcessorThread(int(k), v, thread_sem))
thread_list[-1].start()
次に、ProcessorThread のコンストラクターで、次のようにします。
def __init__(self, siteid, data, lock_object):
threading.Thread.__init__(self)
self.setDaemon(False)
self.lock_object = lock_object
self.data = data
self.siteid = siteid
self.lock_object.acquire()
スレッドがそのタスクを終了すると (成功したかどうかに関係なく)、lock_object
が解放され、別のプロセスを開始できるようになります。
HTH
于 2010-03-17T18:16:51.393 に答える