利用 psyco 让 Python 程序执行更快

 

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






英文原文OSCHINA翻译(转载请注明出处)