利用 psyco 让 Python 程序执行更快


Python 和其他的脚本语言在性能上跟一些编译语言(如C语言)比较要差不少,例如这里有两个用 C 和 Python 语言编写的斐波纳契数列计算程序:

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


正如我们说预想的,C 程序比 Python 要快很多,在我们这个例子中要快 5 倍之多。

尽管在 Web 环境中,指令执行的速度并不重要,因为瓶颈是在 I/O 上。但我也同时在其他地方使用 Python ,因此让我们来看看如何优化 Python 程序的执行速度。


Python 的设计在很多方面都类似于 Java 的设计。两者都利用了解释专门的伪编译字节码的虚拟机。JVM 比 Python 更高级的一个方面在于优化了字节码的执行。Psyco,一种 Python 专用编译器,帮助平衡了这一竞争。Psyco 现在是个外部模块,但是在将来的某一天它可能会包括到 Python 本身中去。只需极少量的额外编程,通常就可以使用 Psyco 将 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

http://webscraping.com/blog/How-to-make-python-faster/


另外 其他参考

使用psyco
import psyco
psyco.full()#对所有函数用psyco进行编译
psyco.bind(myfunction1)#对选中的函数用psyco进行编译

g = psyco.proxy(f) #对函数f用psyco进行编译
g(args)            # Psyco-accelerated call 编译后g函数速度会有提升
f(args)            # regular slow call f函数保持原来的调用速度




psyco.log # 用来记录日志 Enable logging to a file named xxx.log-psyco by default, where xxx is the name of the  script you ran.

psyco.profile() # 可以替代psyco.ful()

psyco.log()
psyco.full(memory=100) #参数是什么意思没看懂。
psyco.profile(0.05, memory=100)#0.05,memeoy=100 参数也没看懂。
psyco.profile(0.2)

参考:http://www.oschina.net/p/psyco
    :http://www.oschina.net/question/12_86806
更详细 参考:http://leeon.me/a/use-Psyco-to-improve-Python-speed

通过看评论,貌似这个 psyco对于2.7以上的不支持……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值