採用Psyco實現python執行速度提高到與編譯語言一樣的水平
阿新 • • 發佈:2018-12-23
本文例項講述了採用Psyco實現python執行速度提高到與編譯語言一樣的水平的方法,分享給大家供大家參考。具體實現方法如下:
一、安裝Psyco很簡單,它有兩種安裝方式,一種是原始碼方式,一種是二進位制碼方式:
如果用原始碼方式安裝,你需在原始碼的目錄中呼叫python setup.py install命令編譯生成psyco子目錄,再把該子目錄整個拷貝到python的site-packages目錄下。
如果用二進位制碼方式安裝,按這個網址列表中的python與psyco版本對應表下載合適的二進位制檔案,解壓後會生成一個psyco-1.x的目錄,把該目錄下的psyco目錄整個拷貝到python的site-packages目錄下即可。
二、使用說明,在需要做效率優化的原始檔前面加入以下兩句:
複製程式碼程式碼如下: import psycopsyco.full()
另外,使用psyco.profile()可以對大程式進行適當分析,以確定哪些函式最值得編譯。
psyco.log()函式用來記錄profile()得到的資訊,下次就可以執行就能更快一點。
psyco.bind(myfunc)指定對函式myfunc進行編譯,可以做到比full()更精細的控制。
psyco.proxy(f)建立一個新的函式,它的程式碼是由f編譯得到二進位制碼
三、例子:
psyco_test.py檔案程式碼如下:
複製程式碼程式碼如下: #!/usr/bin/python
# Filename:psyco_test.py
import math, timeit, psyco
def TestA():
res, loopcnt = 0.0, 100
for i in range(loopcnt):
for j in range(loopcnt):
for k in range(loopcnt):
res = res + math.sin(i + j + k)
if __name__ == '__main__':
TestB = psyco.proxy(TestA)
ta = timeit.Timer("TestA()", "from __main__ import TestA")
tb = timeit.Timer("TestB()", "from __main__ import TestB")
print ("TestA(): %.2fs" % (ta.timeit(10)))
print ("TestB(): %.2fs" % (tb.timeit(10)))
執行結果如下:
複製程式碼程式碼如下: [email protected]:~/work/python/psyco$ python psyco_test.py
TestA(): 4.41s
TestB(): 1.63s
使用psyco處理過的函式執行速度快了4倍左右, 跟作者宣稱的差不多。
希望本文所述對大家的Python程式設計有所幫助。