python程式設計小結 Python程序程式設計小結

2021-10-11 13:14:32 字數 2511 閱讀 4757

1.有兩種方式來實現併發性,一種方式是讓每個「任務」或「程序」在單獨的內在空間中工作,每個都有自已的工作記憶體區域。不過,雖然程序可在單獨的記憶體空間中執行,但除非這些程序在單獨的處理器上執行,否則,實際並不是「同時」執行的。是由作業系統把處理器的時間片分配給乙個程序,用完時間片後就需退出處理器等待另乙個時間片的到來。另一種方式是在在程式中指定多個「執行執行緒」,讓它們在相同的記憶體空間中工作。這稱為「多執行緒處理」。執行緒比程序更有效,因為作業系統不必為每個執行緒建立單獨的記憶體空間。

2. 新建程序用os.fork函式。但它只在posix系統上可用,在windows版的python中,os模組沒有定義os.fork函式。相反,windows程式設計師用多執行緒程式設計技術來完成併發任務。

3. os.fork 函式建立程序的過程是這樣的。程式每次執行時,作業系統都會建立乙個新程序來執行程式指令。程序還可呼叫os.fork,要求作業系統新建乙個程序。父程序是呼叫os.fork函式的程序。父程序所建立的程序叫子程序。每個程序都有乙個不重複的程序id號。或稱pid,它對程序進行標識。子程序與父程序完全相同,子程序從父程序繼承了多個值的拷貝,如全域性變數和環境變數。兩個程序的唯一區別是fork的返回值。子程序接收返回值0,而父程序接收子程序的 pid作為返回值。

4. 用os.fork建立的子程序和父程序作為非同步的併發程序而單獨執行。非同步是指它們各行其是,相互間不進行同步;併發是指它們可同時執行。所以我們無法知道子程序和父程序的相對速度

5. os.wait 函式用於等待子程序結束(只適用於unix相容系統)。該函式返回包含兩個元素的元組,包括已完成的子程序號pid,以及子程序的退出狀態,返回狀態為 0,表明子程序成功完成。返回狀態為正整數表明子程序終止時出錯。如沒有子程序,會引發oserror錯誤。os.wait要求父程序等待它的任何乙個子程序結束執行,然後喚醒父程序。

6.要指示父程序等候乙個指定的子程序終止,可在父程序中使用os.waitpid函式(只適用於unix相容系統)。它可等候乙個指定程序結束,然後返回乙個雙元素元組,其中包括子程序的pid和子程序的退出狀態。函式呼叫將pid作為第乙個引數傳遞,並將乙個選項作為第二個選項,如果第乙個引數大於0,則 waitpid會等待該pid結束,如果第乙個引數是-1,則會等候所有子程序,也就和os.wait一樣。

7. 用os.system 和 os.exec函式族來執行系統命令和其它程式。os.system使用shell來執行系統命令,然後在命令結束之後把控制權返回給原始程序;os.exec函式族在執行完命令後不將控制權返回給呼叫程序。它會接管python程序,pid不變。這兩個函式支援unix和windows平台。

8. os.popen() 函式可執行命令,並獲得命令的stdout流。函式要取得兩個引數,乙個是要執行的命令,另乙個是呼叫函式所用的模式,如「r」唯讀模式。 os.popen2()函式執行命令,並獲得命令的stdout流和stdin流。函式返回乙個元組,其中包含有兩個檔案物件,乙個物件對應stdin 流,乙個物件對應stdout流。

9. 程序使用ipc機制在程序間傳遞資訊,一種ipc機制是「管道」,它是一種類似於檔案的物件,提供單向通訊渠道。父程序可開啟乙個管道,再分支乙個子程序。父程序使用管道將資訊寫入(傳送到)子程序,而子程序使用管道從父程序讀取資訊。在python中使用os.pipe函式建立管道。

10.os._exit() 類似於sys.exit(),但它不執行任何的清除工作(例如重新整理緩衝區)。所以os._exit()尤其適用於退出子程序。如果程式使用 sys.exit(),作業系統會**父程序或其它子程序可能仍然需要的資源。傳給os._exit()函式的引數必須是程序的退出狀態。退出狀態為0,表示正常終止。

11. 程序也可用訊號進行通訊。所謂「訊號」,是作業系統採取非同步方式傳給程式的訊息。如ctrl+c會傳遞乙個「中斷訊號」,通常該訊號導致程式中止。然而程式完全可以指定用不同的行動來響應任何乙個訊號。在訊號處理中,程式要接收訊號,並根據那個訊號採取一項行動。錯誤(例如向已關閉管道寫入)、事件(例如計時器變成0)以及使用者輸入(例如按ctrl+c)都會產生訊號。

12. 針對每個訊號,每個python程式都有乙個預設的訊號處理程式。例如,假定python直譯器收到乙個訊號,該訊號指出程式試圖向已關閉的管道寫入,或者使用者敲入乙個鍵盤中斷,python就會引發乙個異常。發生異常後,程式既可使用預設處理程式,也可使用自定義處理程式。

13. signal.signal函式為中斷訊號註冊乙個訊號處理程式。函式要獲得兩個引數:乙個訊號和乙個對應於訊號處理程式的函式。

14. 在 unix/linux系統中,子程序終止後,會保留在程序表中,讓父程序知道子程序是否正常終止。如果建立大量子程序,但在終止後沒有從程序表中移除它們,程序表便會積累越來越多的死程序,這些程序稱為「zombies」(殭屍程序),消除殭屍程序的操作稱為「reaping」,這是通過os.wait 和os.waitpid函式實現的。

18.2. 良好的程式設計習慣

1. 程序應關閉不需要的管道端,因為作業系統限制了可同時開啟的檔案說明符數量。

18.3. 移植性提示

1.並不是所有作業系統都能從乙個正在執行的程式建立單獨的程序,所以,程序管理是移植性最差的一項python特性。

2. 每個系統都定義了特有訊號集。signal是依賴於具體平台的模組,其中只包含系統定義的訊號。

python是高階動態程式語言 Python語言

python是一門跨平台 開源 免費的解釋型高階動態程式語言。python支援命令式程式設計 how to do 函式式程式設計 what to do 完全支援物件導向程式設計,擁有大量擴充套件庫。膠水語言 可以把多種不同語言編寫的程式融合到一起實現無縫拼接,更好地發揮不同語言和工具的優勢,滿足不同...

python程式設計小結 python物件導向程式設計小結

這個是跟著教程一步一步走過來的,所以記下自己學習的過程。一 類基礎 1 類的定義 class class 父類名 classhuman age 0 name classstudent human school number 0 grade 0 2 類的使用 如果直接使用類名修改其屬性,那麼將影響已經...

Python程式設計學習第十二課之Python的注釋

當我們編寫的程式 量很大,而且內部邏輯關係非常複雜的時候,閱讀 是非常吃力的。所以我們的程式設計師寧願自己重新寫 也不願意去熟悉別人的 那麼,實際編寫 的過程之中,對 加筆記說明就顯得尤為重要了。在這裡,針對 的筆記被稱為注釋。在之前的幾節課裡面,我們已經不止一次用過注釋了,如下圖所示,以 符號開頭...