バイトコンパイルってどういう時に使うんですか?


pythonのコードをコンパイルできると知り、実効速度を比べてみました。

[code]

    for i in range(0, 1000000):
        print i
    
[/code]

こちらのコードで比較しています。

[code]

    $ time python main.py
    python main.py  0.80s user 0.64s system 71% cpu 2.000 total
    
    $ time python main.py
    python main.pyc  0.79s user 0.64s system 68% cpu 2.074 total
    
[/code]

コンパイルと聞いたので、Javaなどのように単純に実行速度が早くなるのかと思ったのですが、変わりませんでした。  
どのような時に有効で、どのようなときに使われるのが一般的なのかおしえていただけますか。




> Python は C やその他の言語のように機械語にコンパイルできますか？  
>  <http://docs.python.jp/2.7/faq/design.html?highlight=pyc#python-c>
>
> 内部的には、Python のソースコードはいつもバイトコード表現に翻訳されていて、そのバイトコードが
> Pythonの仮想マシンによって実行されます。めったに変更されないモジュールの解析が繰り返されることによるオーバーヘッドを避けるため、このバイトコードはモジュールが解析されるたびに名前が”.pic”
> で終わるファイルに書きこまれます。対応する .py ファイルが変更されたとき、そのファイルは再び解析および翻訳されて .pyc
> ファイルは書き直されます。
>
> 一旦 .pyc ファイルが読み込まれればパフォーマンスの差はなく、 .pyc
> ファイルから読み込まれたバイトコードも、直接の変換により生成されたバイトコードも全く同じです。唯一の違いは、.pyc ファイルからコードを読み込むのは
> .py ファイルを解析して翻訳するのよりも速いことなので、予めコンパイルされた .pyc ファイルがあると Python
> スクリプトの起動時間が改善します。必要なら、 Lib/compileall.py モジュールで、与えられたモジュール群の適切な .pyc
> ファイルを生成できます。

