スピード

CPythonは最も一般的なPython実装です。 CPUバウンドの処理なので遅いです。 PyPy は早いです。

David Beazleys さんのCPUバウンドのテストコードを少し修正した(複数のテスト用にループ処理を追加した)バージョン使って、 CPythonとPyPyの処理の差を見ることができます。

PyPy
$ ./pypy -V
Python 2.7.1 (7773f8fc4223, Nov 18 2011, 18:47:10)
[PyPy 1.7.0 with GCC 4.4.3]
$ ./pypy measure2.py
0.0683999061584
0.0483210086823
0.0388588905334
0.0440690517426
0.0695300102234
CPython
$ ./python -V
Python 2.7.1
$ ./python measure2.py
1.06774401665
1.45412397385
1.51485204697
1.54693889618
1.60109114647

Context

The GIL

The GIL (グローバルインタプリタロック)は、Pythonが同時にマルチスレッドで扱うかをどのように許可して Pythonのメモリ管理はスレッドセーフでは全くありません。 だから、GILは一度に同じPythonコードをマルチスレッドで実行されるのを防ぎます。

David BeazleyはGILがどのように動作するかについての ガイド を紹介しています。 Python 3.2の 新しいGIL もカバーしています。 Pythonアプリケーションでパフォーマンスを最大化するには、特定のアプリケーションに対してどのような影響があるかや、 どのくらいのコアが必要かや、アプリケーションのボトルネックがどこにあるかなどのGILに対する深い理解が要求されるということを示しています。

C Extentions

The GIL

追加したスレッドをインタープリターで確認するためにC拡張のコードを書く時は、 特別な注意 を払わなければいけません。

C拡張

Cython

Pyrex

Shedskin?

スレッド

Threading

Spanwing Processes

Multiprocessing