shedskin http://code.google.com/p/shedskin/
雖說python的效能在指令碼語言中還算傑出,但是當程式中出現for,while迴圈或者函數遞迴調用的情況,其效能就下降的非常快。
比如,用遞迴方法計算fibonacci(33) ,C語言只要幾毫秒,但python 就要10秒左右。
目前,已經有一些工具用於最佳化python的效能了,比如psyco,它可以做到JIT的最佳化。
shedskin採用了一種新的辦法,即“翻譯”。它把python代碼翻譯成C++,然後再編譯成pyd(windows下),so(*nix下)模組。這樣在其它python代碼中,可以簡單的import 編譯好的模組,非常高效、方便。
我將遞迴求解的fibonacci函數用shedskin重新編譯後,速度基本上和C語言版的持平。
PS:
發現shedskin在FreeBSD下的版本有個小bug---Makefile產生的時候會找不到-lpcre庫。
需要對ss.py這個檔案進行一些修改就可以了:
if sys.platform == 'darwin' and os.path.isdir('/usr/local/include'):
line += ' -I/usr/local/include' # XXX
。。。。
if sys.platform == 'darwin' and os.path.isdir('/usr/local/lib'): # XXX
line += ' -L/usr/local/lib'
。。。。
sys.platform == 'darwin'去掉即可。
shedskin當然也有缺點,就是它只能翻譯僅使用python標準庫子集的python程式(如下表):
bisect
collections
ConfigParser
copy
datetime
fnmatch
getopt
glob
math
os (some functionality missing under Windows)
os.path
random
re
socket
string
sys
time