Python 和其他的脚本语言在性能上跟一些编译语言(如C语言)比较要差不少,例如这里有两个用 C 和 Python 语言编写的斐波纳契数列计算程序:
C语言:
01 |
int fib( int n){ |
02 |
if (n < 2) |
03 |
return n; |
04 |
else |
05 |
return fib(n - 1) + fib(n - 2); |
06 |
} |
07 |
08 |
int main() { |
09 |
fib(40); |
10 |
return 0; |
11 |
} |
Python语言:
1 |
def fib(n): |
2 |
if n < 2 : |
3 |
return n |
4 |
else : |
5 |
return fib(n - 1 ) + fib(n - 2 ) |
6 |
fib( 40 ) |
下面是执行的时间比较:
1 |
$ time ./fib |
2 |
3.099s |
3 |
$ time python fib.py |
4 |
16.655s |
正如我们说预想的,C 程序比 Python 要快很多,在我们这个例子中要快 5 倍之多。
尽管在 Web 环境中,指令执行的速度并不重要,因为瓶颈是在 I/O 上。但我也同时在其他地方使用 Python ,因此让我们来看看如何优化 Python 程序的执行速度。
首先需要安装 Psyco,在 Linux 下可以这样:
1 |
sudo apt-get install python-psyco |
然后修改 Python 脚本来调用 psyco:
1 |
import psyco |
2 |
psyco.full() |
3 |
4 |
def fib(n): |
5 |
if n < 2 : |
6 |
return n |
7 |
else : |
8 |
return fib(n - 1 ) + fib(n - 2 ) |
9 |
fib( 40 ) |
再次执行的时间是:
1 |
$ time python fib.py |
2 |
3.190s |
只需要 3 秒钟,使用 psyco 后 Python 的执行速度居然跟 C 语言相差无几。Psyco 通过即时编译代码避免逐行解释执行来提升运行速度的。
现在将我大部分 Python 代码加上下列脚本来利用 Psyco 提升运行速度:
1 |
try : |
2 |
import psyco |
3 |
psyco.full() |
4 |
except ImportError: |
5 |
pass # psyco not installed so continue as usual |