python高階 深入理解系統程序1

2021-09-08 20:14:00 字數 3732 閱讀 3245

之前程式執⾏都是⼀條腿⾛路,甚⾄是⽤⼀杆槍來打天下。

通過系統程式設計的學習,會讓⼤家有「多條腿」⼀起⾛路,就好⽐有了⼀把機關槍。

此篇為深入理解程序第一篇,下面開始今天的說明~~~

試想,如果把唱歌和跳舞這2件事情分開依次完成的話,估計就沒有那麼好的效果了(想⼀下場景:先唱歌,然後在跳舞,o(∩_∩)o哈哈~)

如下程式,來模擬「唱歌跳舞」這件事情

from time import

sleep

defsing():

for i in range(3):

print("

正在唱歌...%d

"%i)

sleep(1)

defdance():

for i in range(3):

print("

正在跳舞...%d

"%i)

sleep(1)

if__name__ == '

__main__':

sing()#唱歌

dance()#

跳舞

執行結果如下:

!!!注意:

什麼叫「多工」呢?簡單地說,就是作業系統可以同時運⾏多個任務。打個⽐⽅,你⼀邊在⽤瀏覽器上⽹,⼀邊在聽***,⼀邊在⽤word趕作業,這就 是多工,⾄少同時有3個任務正在運⾏。還有很多任務悄悄地在後台同時運⾏著,只是桌⾯上沒有顯示⽽已。

現在,多核cpu已經⾮常普及了,但是,即使過去的單核cpu,也可以執⾏多工。由於cpu執⾏**都是順序執⾏的,那麼,單核cpu是怎麼執⾏多工的呢?

答案就是作業系統輪流讓各個任務交替執⾏,任務1執⾏0.01秒,切換到任務2,任務2執⾏0.01秒,再切換到任務3,執⾏0.01秒……這樣反覆執⾏下去。 表⾯上看,每個任務都是交替執⾏的,但是,由於cpu的執⾏速度實在是太快了,我們感覺就像所有任務都在同時執⾏⼀樣。

真正的並⾏執⾏多工只能在多核cpu上實現,但是,由於任務數量遠遠多 於cpu的核⼼數量,所以,作業系統也會⾃動把很多任務輪流排程到每個核⼼上執⾏。

編寫完畢的**,在沒有運⾏的時候,稱之為程式

正在運⾏著的**,就成為程序

程序,除了包含**以外,還有需要運⾏的環境等,所以和程式是有區別的。

python的os模組封裝了常⻅的系統調⽤,其中就包括fork,可以在python程 序中輕鬆建立⼦程序:

importos#

注意:fork函式,只在unix/linux/mac上執行,windows不可以

pid =os.fork()

if pid ==0:

print('

哈哈1'

)else

:

print('

哈哈2')

執行結果:

說明:

在unix/linux作業系統中,提供了⼀個fork()系統函式,它⾮常特殊。

普通的函式調⽤,調⽤⼀次,返回⼀次,但是fork()調⽤⼀次,返回兩次,因 為作業系統⾃動把當前程序(稱為⽗程序)複製了⼀份(稱為⼦程序),然 後,分別在⽗程序和⼦程序內返回。

⼦程序永遠返回0,⽽⽗程序返回⼦程序的id。

這樣做的理由是,⼀個⽗程序可以fork出很多⼦程序,所以,⽗程序要記下 每個⼦程序的id,⽽⼦程序只需要調⽤getppid()就可以拿到⽗程序的id。

import

osrpid =os.fork()

if rpid<0:

print("

fork呼叫失敗。")

elif rpid ==0:

print("

我是子程序(%s),我的父程序是(%s)

"%(os.getpid(),os.getppid()))

x+=1

else

:

print("

我是父程序(%s),我的子程序是(%s)

"%(os.getpid(),rpid))

print("

父子程序都可以執行這裡的**

")

運⾏結果:

#注意:fork函式,只在unix/linux/mac上執行,windows不可以

pid =os.fork()

if pid ==0:

num+=1

print("

哈哈1---num=%d

"%num)

else

: time.sleep(1)

num+=1

print("

哈哈2---num=%d

"%num)

執行結果:

總結:

多程序中,每個程序中所有資料(包括全域性變數)都各有擁有⼀份,互不影響

如果在⼀個程式,有2次的fork函式調⽤,是否就會有3個程序呢?

import

osimport

time

#注意,fork函式,只在unix/linux/mac上執行,windows不可以

pid =os.fork()

if pid ==0:

print('

哈哈1'

)else

:

print('

哈哈2'

)pid =os.fork()

if pid ==0:

print('

哈哈3'

)else

:

print('

哈哈4'

)time.sleep(1)

執行結果:

說明:

⽗⼦程序的執⾏順序

⽗程序、⼦程序執⾏順序沒有規律,完全取決於作業系統的排程演算法

python深入 Python的深入理解

處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...

深入理解系統呼叫

一.實驗要求 二.實驗環境搭建 1.安裝開發工具 sudo apt install build essential sudo apt install qemu install qemu sudo apt install libncurses5 dev bison ex libssl dev libe...

深入理解Python類

c 中,類有兩個關鍵的內建函式,建構函式和析構函式。在python中,其實也有類似的函式,他們就是 def init self pass def del self pass def enter self pass def exit self pass在物件建立時執行操作。在物件析構時執行操作。注意 ...