次のようなクラスを検討してください。
class Foo:
def __init__(self, data):
self.data = data
def do_task(self):
#do something with data
私のアプリケーションには、Fooクラスのいくつかのインスタンスを含むリストがあります。目的は、すべてのFooオブジェクトに対してdo_task
を実行することです。最初の実装は単純です:
#execute tasks of all Foo Object instantiated
for f_obj in my_foo_obj_list:
f_obj.do_task()
私のマシンの4つのCPU間でfor
サイクルを共有するマルチコアアーキテクチャを活用したいと思います。
それを行う最良の方法は何ですか?
マルチプロセッシングモジュールで プロセスプール を使用できます。
def work(foo):
foo.do_task()
from multiprocessing import Pool
pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()
すべてのマルチスレッド/マルチコアの基本を調べる代わりに、Ryan W. Smithの投稿を参照したいと思います。 Pythonでのマルチコアと分散プログラミング
彼は、複数のコアを活用し、それらの概念を使用する方法について詳しく説明します。ただし、一般的なマルチスレッドの概念に精通していない場合は、それらに注意してください。
Functional Programming では、各コアのアルゴリズム/機能をカスタマイズすることもできます。