一、執行過程。
python先把**(.py檔案)編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。
python 虛擬機器載入並執行位元組碼檔案,執行的過程與作業系統載入執行可執行檔案的方式相似。但是python虛擬機器在執行的時候也使用內部構建的棧幀來執行。
二、具體過程。
1.虛擬機器啟動,初始化環境。(又是初始化。。。)
2.載入位元組碼檔案,建立棧幀物件。
位元組碼 是pycodeobject的物件。python **的編譯結果就是pycodeobject物件;結構如下:
typedef struct pycodeobject;載入模組時,模組對應的pycodeobject物件被寫入.pyc檔案,pyc 檔案是位元組碼在磁碟的表現形式格式如下。
3.主迴圈中獲取當前活動執行緒的狀態物件。
4.獲取執行緒物件包含的棧幀物件。
5.通過棧幀物件來載入執行位元組碼檔案的指令。
執行位元組碼python虛擬機器的原理就是模擬可執行程式再x86機器上的執行,x86的執行時棧幀如下圖:
python虛擬機器的原理就是模擬上述行為。當發生函式呼叫時,建立新的棧幀,對應python的實現就是pyframeobject物件
執行位元組碼時,會先建立乙個棧幀,對應python的實現就是pyframeobject物件。
pyframeobject那麼對應python的執行時棧就是這樣子:typedef struct _frame {
pyobject_var_head
struct _frame *f_back; /* 呼叫者的幀 */
pycodeobject *f_code; /* 幀對應的位元組碼物件 */
pyobject *f_builtins; /* 內建名字空間 */
pyobject *f_globals; /* 全域性名字空間 */
pyobject *f_locals; /* 本地名字空間 */
pyobject **f_valuestack; /* 執行時棧底 */
pyobject **f_stacktop; /* 執行時棧頂 */
call_function指令執行時,會建立新的棧幀,並執行相對應的位元組碼指令。
三、 總結。
主要是簡單介紹了,python虛擬機器執行的全過程。主要是那5步。記住就ok~
虛擬機器執行異常
2.如果斷網,關閉防火牆後,開啟虛擬機器還是沒有反應.可能是軟體執行的權 限不夠,此時要以管理員身份來執行vmware.解決方案 右鍵vmware圖示 屬性 相容性 以管理員身份執行此程式.解決方案 關閉vmware,包括程序裡關掉所有vmware的程序 如果當前是開啟的話。不關閉不會出現 lck ...
VMware虛擬機器執行速度優化
2019.6.22 執行環境 windows 10 pro 1903,vmware workstation 15 pro 15.1.0 build 13591040 1.vmware虛擬機器執行卡慢的解決辦法 freespider csdn部落格 上圖是按win r,輸入dxdiag得到的我電腦的配...
主機訪問虛擬機器執行django專案
前提條件 主機和虛擬機器互相ping通 虛擬機器可以訪問外網 虛擬機器安裝curl python3.7 pip安裝 安裝django 對於django 可以先去看看對應的版本 根據個人的python安裝目錄不同而不同 如果找不到python安裝在 的可以 find name python 命令檢視 ...