1

基本的に、特定の期間、いくつかのタスクを実行するために、スレッドへのプールが必要です。これを行うには、Python のマルチプロセッシング ライブラリが最適であると考えました。ただし、プロセスの1つが終了したときに(プール内の他のスレッドが終了するのを待たずに)、メインスレッドに戻って特定のタスクを実行する方法がわかりません(変数をインクリメントし、時間を確認するしきい値に達したなど)、新しいパラメータで新しいプロセスを開始する可能性があります。たとえば、ここでは、処理するプロセスのプール (4) に対して、関数のすべての引数が前もって (1..10) 与えられます。

from multiprocessing import Pool

def f(x):
return x*x

if __name__ == '__main__':
    pool = Pool(processes=4)              # start 4 worker processes
    print pool.map(f, range(10))          # prints "[0, 1, 4,..., 81]"

ただし、特定の期間にいくつかのタスクを実行する必要があるため、これらのタスクが完了するまでにかかる時間が必ずしもわからないため、これは役に立ちません。これを行う方法はありますか?

4

1 に答える 1

1

解決策の 1 つは、共有キューを使用することです。例えば:

from multiprocessing import Process, Queue
import time

def job(queue):
    while True:
        task = queue.get()
        print task*task

if __name__ == '__main__':
    # create shared queue
    q = Queue()

    # create processes
    processes = []
    for i in range(5):
        p = Process(target=job, args=(q,))
        p.start()
        processes.append(p)

    # generate data
    for i in range(5):
        for j in range(10):
            q.put(10*i+j)
        time.sleep(0.5)

    # join
    for p in processes:
        p.join()

後でデータが追加されたときにどのように機能するかを示すために追加time.sleepしました (プロセスは、共有キューで何かが利用可能になるまで待機します)。

于 2013-08-07T06:48:42.320 に答える