5

Pythonマルチプロセッシングモジュールからプールを作成しましたが、プールで実行されているプロセスの数を変更したり、プロセスに追加したりしたいと思います。これは可能ですか?私はこのようなものを試しました(私のコードの簡略化されたバージョン)

class foo:
    def __init__():
        self.pool = Pool()
    def bar(self, x):
        self.pool.processes = x
        return self.pool.map(somefunction, list_of_args)

それはうまくいき、最終的に私が望んでいた結果(複数のプロセス間で作業を分割することでした)を達成しているようですが、これがそれを行うための最良の方法であるか、なぜそれが機能するのかわかりません。

4

2 に答える 2

2

これは実際には機能しないと思います:

import multiprocessing, time

def fn(x):
    print "running for", x
    time.sleep(5)

if __name__ == "__main__":
    pool = multiprocessing.Pool()
    pool.processes = 2

    # runs with number of cores available (8 on my machine)
    pool.map(fn, range(10))

    # still runs with number of cores available, not 10
    pool.processes = 10
    pool.map(fn, range(10))

multiprocessing.PoolPool._processesプールがインスタンス化された時点で設定されるプライベート変数 (つまり ) にプロセス数を格納します。ソースコードを参照してください。

これが機能しているように見える理由は、別の数を指定しない限り、プロセス数が現在のマシンのコア数に自動的に設定されるためです。

利用可能なプロセスの数を変更したい理由がわかりません。これについて詳しく説明してください。ただし、必要なときにいつでも新しいプールを作成するのは非常に簡単です (おそらく他のプールの実行が終了した後)。

于 2012-04-04T18:06:33.647 に答える
1

プライベート変数_processesとプライベート メソッドを使用してできます_repopulate_pool。ただし、プライベート変数などの使用はお勧めしません。

pool = multiprocessing.Pool(processes=1, initializer=start_process)
>Starting ForkPoolWorker-35

pool._processes = 3
pool._repopulate_pool()
>Starting ForkPoolWorker-36
>Starting ForkPoolWorker-37
于 2018-06-07T20:15:19.570 に答える