web-dev-qa-db-ja.com

Pythonマルチコアプログラミング

次のようなクラスを検討してください。

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サイクルを共有するマルチコアアーキテクチャを活用したいと思います。

それを行う最良の方法は何ですか?

11
Larry

マルチプロセッシングモジュールで プロセスプール を使用できます。

def work(foo):
    foo.do_task()

from multiprocessing import Pool

pool = Pool()
pool.map(work, my_foo_obj_list)
pool.close()
pool.join()
17
timrau

すべてのマルチスレッド/マルチコアの基本を調べる代わりに、Ryan W. Smithの投稿を参照したいと思います。 Pythonでのマルチコアと分散プログラミング

彼は、複数のコアを活用し、それらの概念を使用する方法について詳しく説明します。ただし、一般的なマルチスレッドの概念に精通していない場合は、それらに注意してください。

Functional Programming では、各コアのアルゴリズム/機能をカスタマイズすることもできます。

8
Dr.Elch