麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

利用Psyco提升Python運行速度

2020-02-23 06:16:42
字體:
來源:轉載
供稿:網友

Psyco 是嚴格地在 Python 運行時進行操作的。也就是說,Python 源代碼是通過 python 命令編譯成字節碼的,所用的方式和以前完全相同(除了為調用 Psyco 而添加的幾個 import 語句和函數調用)。但是當 Python 解釋器運行應用程序時,Psyco 會不時地檢查,看是否能用一些專門的機器代碼去替換常規的 Python 字節碼操作。這種專門的編譯和 Java 即時編譯器所進行的操作非常類似(一般地說,至少是這樣),并且是特定于體系結構的。到現在為止,Psyco 只可用于 i386 CPU 體系結構。Psyco 的妙處在于可以使用您一直在編寫的 Python 代碼(完全一樣!),卻可以讓它運行得更快。

Psyco 是如何工作的

要完全理解 Psyco,您可能需要很好地掌握 Python 解釋器的 eval_frame() 函數和 i386 匯編語言。遺憾的是,我自己不能對其中任何一項發表專家性的意見 - 但是我想我可以大致不差地概述 Psyco。
在常規的 Python 中,eval_frame() 函數是 Python 解釋器的內循環。eval_frame() 函數主要察看執行上下文中的當前字節碼,并將控制向外切換到一個適合實現該字節碼的函數。支持函數將做什么的具體細節通常取決于保存在內存中的各種 Python 對象的狀態。簡單點說,添加 Python 對象“2”和“3”和添加對象“5”和“6”會產生不同的結果,但是這兩個操作都以類似的方式分派。
Psyco 用復合求值單元替代 eval_frame() 函數。Psyco 有幾種方法可以用來改進 Python 所進行的操作。首先,Psyco 將操作編譯成有點優化的機器碼;由于機器碼需要完成的工作和 Python 的分派函數所要做的事一樣,所以其本身只有些許改進。而且,Psyco 編譯中的“專門的”內容不僅僅是對 Python 字節碼的選擇,Psyco 也要對執行上下文中已知的變量值進行專門化。例如,在類似于下面的代碼中,變量 x 在循環持續時間內是可知的:

代碼如下:
x = 5
l = []
for i in range(1000):
l.append(x*i)

該段代碼的優化版本不需要用“x 變量/對象的內容”乘每個 i,與之相比,簡單地用 5 乘以每個 i 所用的開銷較少,省略了查找/間接引用這一步。
除為小型操作創建特定于 i386 的代碼之外,Psyco 還高速緩存這個已編譯的機器碼以備今后重用。如果 Psyco 能夠識別出特定的操作和早先所執行的(“專門化的”)操作一樣,那么,它就能依靠這個高速緩存的代碼而不需要再次編譯代碼段。這樣就節省了一些時間。
但是,Psyco 中真正省時的原因在于 Psyco 將操作分成三個不同的級別。對于 Psyco,有“運行時”、“編譯時”和“虛擬時”變量。Psyco 根據需要提高和降低變量的級別。運行時變量只是常規 Python 解釋器處理的原始字節碼和對象結構。一旦 Psyco 將操作編譯成機器碼,那么編譯時變量就會在機器寄存器和可直接訪問的內存位置中表示。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品日韩一区 | 99视频有精品 | 国产精品视频一区二区三区四区国 | 亚洲综人网 | 国产精品av久久久久久久久久 | 91精品国产一区二区三区四区在线 | 在线观看中文字幕av | 精品亚洲一区二区三区 | 成人在线免费观看视频 | xxxx69hd一hd72 | 激情视频免费看 | 国产精品久久久久久久久久久久久久久 | 欧美性生活视频免费 | 国产成人自拍av | 国产中文99视频在线观看 | av国产在线被下药迷网站 | 深夜福利视频免费观看 | 国产欧美日韩在线不卡第一页 | 精品国产91久久久久久 | 日韩三级伦理在线观看 | 日韩黄站| 911精品影院在线观看 | 日本不卡一区二区三区在线观看 | 看黄在线 | 亚洲一区二区成人 | 一区二区三区国产视频 | 91在线色| 日韩视频在线观看免费 | 一级黄色影院 | 成人毛片视频在线播放 | 国产激情精品一区二区三区 | 亚洲精品动漫在线观看 | 视频一区国产 | 黄色午夜剧场 | 日本一区二区三区视频在线 | 国产精品999在线观看 | www.精品久久| 色就色 综合偷拍区91网 | 2021狠狠操 | 欧美高清第一页 | 欧美成人免费香蕉 |