1. 程式人生 > >Python運行機制(轉)

Python運行機制(轉)

style eight jit 寫入 無需 執行 pla java 收集

From:https://blog.csdn.net/jeff_liu_sky_/article/details/52097060

https://stackoverflow.com/questions/17130975/python-vs-cpython

Python解釋器簡介

  解釋器是一種讓其他程序運行起來的程序,它是代碼與機器的計算機硬件之間的軟件邏輯層,Python解釋器就是能夠讓Python程序在機器上執行的一套程序。
當我們執行寫好的Python代碼時,Python解釋器會執行兩個步驟

1、把原始代碼編譯成字節碼

編譯後的字節碼是特定於Python的一種表現形式,它不是二進制的機器碼,需要進一步編譯才能被機器執行,這也是Python代碼無法運行的像C/C++ 一樣快的原因。如果Python進程在機器上擁有寫入權限,那麽它將把程序的字節碼保存為一個以.pyc 為擴展名的文件,如果Python無法在機器上寫入字節碼,那麽字節碼將會在內存中生成並在程序結束時自動丟棄。在構建程序的時候最好給Python賦上在計算機上寫的權限,這樣只要源代碼沒有改變,生成的.pyc文件可以重復利用,提高執行效率。

2、把編譯好的字節碼轉發到Python虛擬機(PVM)中進行執行

PVM是 Python Virtual Machine的簡稱,它是Python的運行引擎,是Python系統的一部分,它是叠代運行字節碼指令的一個大循環、一個接一個地完成操作。

技術分享圖片

Python 解釋器的幾種實現版本

Python解釋器有三種主要的實現方式,CPython、Jython和IronPython 三種實現方式 。

1、CPython

CPython 是標準的實現,其它的都是有特定目標的。
CPython 是由C語言編寫的,它是大多數Linux和Mac OS X機器預裝的Python解釋器,也是所有Python解釋器中運行最快、最完整、最健全的。

2、Jython

Jython 是一種Python語言的替代實現方式,其目的是為了與Java編程語言集成,Jython 包含了Java類,這些類編譯Python源代碼、形成Java字節碼,並將得到的字節碼映射到Java虛擬機(JVM)上。因為Jython要比CPython 慢而且也不夠健壯,它往往看作是一個主要面向尋找Java代碼前端腳本語言的Java開發者的一個有趣的工具。

3、IronPython

IronPython 設計的目的是讓Python 程序可以與Windows 平臺上的.NET 框架以及與之對應的Linux的上開源的Mono編寫成的應用集成。

Psyco 實時編譯器

psyco 系統不是Python的另一種實現方式,而是Python字節碼執行模塊的一個擴展組件,它可以讓程序運行的更快。它是一個PVM的增強工具,這個工具收集並使用信息,在程序運行時,可以將部分程序的字節碼轉換成底層的真正的二進制機器代碼,從而實現更快的執行速度。在開發個過程中,Psyco無需代碼的修改或獨立的編譯步驟即可完成這一轉換。
概括地講,就是當程序運行時,Psyco收集了正在傳遞過程中的對象的類別信息,這些信息可以用來裁剪對象的類型,從而生成高效的機器代碼。機器代碼一旦生成,就替代了對應的原始字節碼,從而加快程序的整體執行速度。一些通過Psyco優化的Python代碼的執行速度可以像編譯好的C代碼一樣快。
因為字節碼的轉換與程序運行同時發生,所以Pysco往往被看做是一個即時編譯器(JIT)。實際上Psyco是一個專有的JIT編譯器:它生成機器代碼將數據類型精簡至你程序實際上所使用的類型。
Psyco是用純Python的算法代碼實現的。這點尤為重要,那些為了優化往往需要遷移到C的那部分代碼,使用了Psyco後,這樣的遷移就沒有必要了。

Python運行機制(轉)