1. ホーム
  2. python

[解決済み] マルチプロセシングの使用法.最大同時処理数を持つプロセス

2023-02-17 06:32:51

質問

私は Python というコードがあります。

from multiprocessing import Process

def f(name):
    print 'hello', name

if __name__ == '__main__':
    for i in range(0, MAX_PROCESSES):
        p = Process(target=f, args=(i,))
        p.start()

で、うまく動きます。しかし MAX_PROCESSES の間の任意の値を取ることができます。 1 . このコードを実行するマシンは 512 コアしかないマシン上でこのコードを実行しているので、同時に実行できるプロセスの数を制限することが可能かどうかを調べる必要があります。私が調べたのは 8 を調べましたが、私が必要とするもののようには見えません。あるいは、私がドキュメントを間違って解釈しているのかもしれません。

の同時使用数を制限する方法はありますか? multiprocessing.Queue の同時実行数を制限する方法はありますか?

どのように解決するのですか?

最も賢明な方法は multiprocessing.Process これは、システムで利用可能な最大コア数に基づいてワーカープロセスのプールを生成し、基本的にコアが利用可能になるとタスクを送り込みます。

標準的なドキュメントにある例 ( http://docs.python.org/2/library/multiprocessing.html#using-a-pool-of-workers ) にある例では、手動でコア数を設定することもできることを示しています。

multiprocessing.Pool

というのがあるのも便利ですね。 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': pool = Pool(processes=4) # start 4 worker processes result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously print result.get(timeout=1) # prints "100" unless your computer is *very* slow print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]" メソッドがあることも知っておくと、コード上で必要であれば、与えられたシステム上のコアの数を数えることができます。

編集: あなたの特定のケースで動作すると思われるコードの草案です。

multiprocessing.cpu_count()