2

10 個のプロセスを開く必要があり、そのうちの 1 つが終了するたびに、数秒待ってから別のプロセスを開始したいと考えています。それはかなり単純に思えますが、どういうわけか私はそれを機能させることができません。

4

2 に答える 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 に答える