2

multiprocessing モジュールを理解しようとしています。関数を異なる引数で連続して数回実行したい場合、いつ Process で Pool.map を使用する必要がありますか? それぞれの長所と短所は何ですか?

4

1 に答える 1

0

Pool.map は、特定のタスクを達成するために複数のプロセスを生成します。

別のプロセスで作業したいタスクユニットがある場合は、プロセスを直接生成できます。

def execute_new_work(work=somefunction):
    p = multiprocessing.Process(target=work)
    p.start()

プールを使用して、一定数のワーカーを管理できます。

を使用する代わりに、同じ関数を使用して並行して処理したい作業単位の量がわかっている場合は、for looppool.map を使用できます。これはもっと便利で簡単です

pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,
                            initializer=start_process,
                           )
outputs = pool.map(workon_fucntion, inputs)

ご覧のとおり、これは非常に Pythonic であり、Python の map 関数を思い起こさせます。マップでできることは、 でできますfor loop

ここで注意すべきことは、ワーカー プロセスが事前に固定されており、プールがワーカーへの作業の分散を管理していることです。これは非常に優れています。

于 2012-06-27T05:53:50.970 に答える