合理主義的グルメブログ

学生起業家の日常をツラツラと書いています。主に食事情報です。

Pythonで並列処理をするときメモ

Pybulletのマルチシミュレーションは出来たけど,
threadingモジュールで並列処理しようとすると,エラーが発生します.

いろいろ調べると,大トロさんのサイトにヒントが!

One of the big selling points of ES is that it is easy to parallelise the computation using several workers running on different threads on different CPU cores, or even on different machines. Python’s multiprocessing makes it simple to launch parallel processes. I prefer to use Message Passing Interface (MPI) with mpi4py to launch separate python processes for each job. This allows us to get around the global interpreter lock, and also gives me confidence that each process has its own sandboxed numpy and gym instances which is important when it comes to seeding random number generators.

英語が嫌いな人の気持ちは痛いほどわかるので, Google翻訳の結果を載せておきます.

ESの大きなセールスポイントの1つは、異なるCPUコア上の異なるスレッド、または異なるマシン上で実行されている複数のワーカーを使用して計算を並列化することが容易であることです。 Pythonのマルチプロセッシングにより、並列プロセスを簡単に起動できます。 私は、mpi4pyでMessage Passing Interface(MPI)を使用して、各ジョブごとに別々のPythonプロセスを起動する方が好きです。 これにより、グローバルインタプリタロックを回避することができます。また、各プロセスに乱数ジェネレータをシードする際に重要な、独自のサンドボックスnumpyおよびジムインスタンスがあることを私に確信できます。

どうも,並列処理にも様々な種類があるとのことで,
大トロさんは,mpi4pyをオススメしているらしいです.

以下では,自分が調べていった経過をメモしておきます.

GIL(グローバルインタープリターロック)ってなんだ?

以下のサイトに非常に詳しく書いてあります.

blog.karky7.com

methane.hatenablog.jp

要するに各スクリプトは,同時に1スレッドしか実行できないらしいです.
GILはそのための権利券のようなものかな...

そして,この問題はmultiprocessingモジュールを使うことで,解決できるらしいです.

mpi4py vs multiprocessing

だったら,大トロ様がオススメしているmpi4pymultiprocessing, 結局どっちがいいの?って話になります.

色々,調べましたが,大トロさんが言っている通り,
複数コンピュータで並列処理を書きたいときは,mpi4pyを使えばいいですが, 基本的にはmultiprocessingで良いっぽいです.