PsycoでPythonプログラムの実行を高速化
Pythonや他のスクリプト言語は、C言語などのコンパイル言語と性能がかなり劣っています.例えば、C言語とPython言語で作成されたフィボナッチ数列計算プログラムが2つあります.
C言語:
Python言語:
次に、実行時間の比較を示します.
Web環境では、I/O上のボトルネックであるため、命令の実行速度は重要ではありません.しかし、私も同時に他の場所でPythonを使用しているので、Pythonプログラムの実行速度を最適化する方法を見てみましょう.
まずPsycoをインストールする必要があります.Linuxでは次のことができます.
次にPythonスクリプトを変更してpsycoを呼び出します.
再実行された時間は次のとおりです.
わずか3秒で、psycoを使うとPythonの実行速度はC言語とほとんど変わらない.Psycoは、コードを即時にコンパイルすることで、行ごとの解釈実行を回避し、実行速度を向上させる.
Pythonコードの大部分に次のスクリプトを追加して、Psycoを使用して実行速度を向上させます.
C言語:
- int fib(int n){
- if (n < 2)
- return n;
- else
- return fib(n - 1) + fib(n - 2);
- }
-
- int main() {
- fib(40);
- return 0;
- }
Python言語:
- def fib(n):
- if n < 2:
- return n
- else:
- return fib(n - 1) + fib(n - 2)
- fib(40)
次に、実行時間の比較を示します.
- $ time ./fib
- 3.099s
- $ time python fib.py
- 16.655s
Web環境では、I/O上のボトルネックであるため、命令の実行速度は重要ではありません.しかし、私も同時に他の場所でPythonを使用しているので、Pythonプログラムの実行速度を最適化する方法を見てみましょう.
まずPsycoをインストールする必要があります.Linuxでは次のことができます.
- sudo apt-get install python-psyco
次にPythonスクリプトを変更してpsycoを呼び出します.
- import psyco
- psyco.full()
-
- def fib(n):
- if n < 2:
- return n
- else:
- return fib(n - 1) + fib(n - 2)
- fib(40)
再実行された時間は次のとおりです.
- $ time python fib.py
- 3.190s
わずか3秒で、psycoを使うとPythonの実行速度はC言語とほとんど変わらない.Psycoは、コードを即時にコンパイルすることで、行ごとの解釈実行を回避し、実行速度を向上させる.
Pythonコードの大部分に次のスクリプトを追加して、Psycoを使用して実行速度を向上させます.
- try:
- import psyco
- psyco.full()
- except ImportError:
- pass # psyco not installed so continue as usual