例えば:
instances = [ClassName() for i in range(no_inst)]
for data in dataset:
for inst in instances:
inst.dosomething(data)
注: インスタンスはデータを変更しないため、インスタンス間の通信は必要ありません。
例えば:
instances = [ClassName() for i in range(no_inst)]
for data in dataset:
for inst in instances:
inst.dosomething(data)
注: インスタンスはデータを変更しないため、インスタンス間の通信は必要ありません。
私が知っている最も簡単な方法は、ビルトインを使用するのとmultiprocessing.Pool.map
同じ方法で使用することですmap
。完了したいタスクを実行する関数を作成するだけで、すべての並列処理が処理されます。
import multiprocessing as mp
instances = [ClassName() for i in range(no_inst)]
def dosomething(inst):
for data in dataset:
inst.dosomething(data)
num_procs = 4 #however many processors you'll use
pool = mp.Pool(num_procs)
pool.map(dosomething,instances)
いくつかの落とし穴があります-たとえば、lambda
関数はピクル化できないため、ここでは機能しません。これはNone
(それが返されるので) のリストも返します - 通常、私はリスト内包表記や副作用のためにdosomething
リスト内包表記を使用するのは好きではありませんが、マルチプロセッシングに関しては、それがとても簡単であるという理由だけで、そのスタンスを緩めます。map
threading
インターフェースを使用して、Thread
を満たすクラスを作成できますdosomething(data)
。ループごとに複数のスレッドを開始し、run()
それらを開始するために呼び出すことができます。すべてが完了するまでステータスを確認できるように、それらをリストに入れることをお勧めします。