Xion's Programming Notes

プログラミングの勉強や囲碁プログラムの開発について書いていきます。

Pythonのthreadとprocessを試してみた

実験結果

  • x軸は,threadの数,processの数
  • y軸は,並列処理でかかった計算時間 / 逐次実行でかかった計算時間

  1. threadが遅い.threadを作るオーバーヘッドのために,どんどん遅くなっていっていると考えられる.
  2. processはそこそこ.process sizeに比例とまではいかないものの,8 processまでならなかなかの高速化.

結論

  1. Pythonさんのthreading.Threadは,GILだかなんだかのせいで,少なくとも普通にやったのでは並列処理にならないらしい.
  2. multiprocessing.Processなら,コア数分くらいまでなら並列化をちゃんとやってくれるみたい.

実装

単純にn回分数えるだけの関数を分割して実行しただけです.

ソースは,こちら.Bitbucketで公開してみました.ちゃんとできてるかな…?
# よく見ると,数の分割がちょっと効率悪いけど,結果には影響しなさそうだから放置しとこう.

こちらのサイトを参考にしました.というよりモロパクリしました.
http://www.quark.kj.yamagata-u.ac.jp/~hiroki/python/?id=15

実験環境

環境は以下の通り.
i7だから仮想的に8個分の並列処理は一応できるんだと思う.

CPU Intel Core i7 2700K@3.5GHz
OS Ubuntu 12.04 32bit

数える個数n = 500万.その試行を10回やった平均(合計)時間で割合を計算しています.

Pythonのバージョンは,2.7.3なので,3以降とは状況が違うかもしれません.