Python學習筆記之二——Python的運行機制

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 解釋器的幾種實現版本

  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後,這樣的遷移就沒有必要了。

—獨樂樂不如衆樂樂—

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章