程序 multiprocessing詳解

2022-07-23 20:24:24 字數 2007 閱讀 1281

一 ,核心

就是像執行緒一樣管理程序 ,類似於threading ,cup利用率較好,該模組用來跨平台的多程序模組,含有乙個process 類代表程序物件,start() 啟動程序

process語法結構如下:

process([group [, target [, name [, args [, kwargs]]]]])

target:表示這個程序例項所呼叫物件;

args:表示呼叫物件的位置引數元組;

kwargs:表示呼叫物件的關鍵字引數字典;

name:為當前程序例項的別名;#

group:大多數情況下用不到;

process類常用方法:

is_alive():判斷程序例項是否還在執行;

join([timeout]):是否等待程序例項執行結束,或等待多少秒;

start():啟動程序例項(建立子程序);

run():如果沒有給定target引數,對這個物件呼叫start()方法時,就將執行物件中的run()方法;

terminate():不管任務是否完成,立即終止;

process類常用屬性:

name:當前程序例項別名,預設為process-n,n為從1開始遞增的整數;

pid:當前程序例項的pid值;

三,程序的建立

1.直接通過process 建立程序

2,通過繼承process,重寫init,run方法

3,建立程序池------pool

方法 close():關閉pool,使其不再接受新的任務;

terminate():不管任務是否完成,立即終止;

join():主程序阻塞,等待子程序的退出, 必須在close或terminate之後使用;主程序建立或新增任務後 預設不會等待程序池中的任務執行完後才結束。而是當主程序的任務做完後,立馬結束,如果這個地方沒有join 會導致程序池中的任務不會執行

(向程序中新增任務

注意:如果新增的任務數量超過程序池中程序的數量,不會導致新增不進去,

新增到程序的任務,如果還沒有執行的話,那麼系好似他們會等帶程序池中的乙個程序完成任務後,會自動去用剛剛完成任務的程序我i完成新的任務

),同步、非同步、阻塞和非阻塞四種呼叫方式。

每次迴圈將空閒下來的子程序去呼叫目標===非堵塞方式

設定程序池最大子程序數

阻塞就是幹不完不准回來,   

非阻塞就是你先乾,我現看看有其他事沒有,完了告訴我一聲

同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。

非同步過程呼叫發出後,呼叫者不能立刻得到結果。實際處理這個呼叫的部件在完成後,通過狀態、通知和**來通知呼叫者

老張愛喝茶,廢話不說,煮開水。出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。1 老張把水壺放到火上,立等水開。(同步阻塞)老張覺得自己有點傻2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。3 老張把響水壺放到火上,立等水開。(非同步阻塞)老張覺得這樣傻等意義不大4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(非同步非阻塞)老張覺得自己聰明了。

四,程序間通訊 佇列queue--是執行緒安全的

多個程序配合程序===資料互動----快取區

方法用於實現多個程序之間的資料傳遞

建立queue物件時 沒有指定則沒有上限值

queue.*****===先進先出

qsize() 返回當前佇列中訊息的數量

empty() 判斷是否為空、

full 判斷是否滿l

get 獲取佇列中的一條訊息,然後將其在佇列中移除

queue.get_nowait():相當queue.get(false);

queue.put(item,[block[, timeout]]):將item訊息寫入佇列,block預設值為true堵塞

生產者消費者模型queue 作為管道 ====單向佇列

程序池之間的程序通訊==

程序特例 殭屍程序 孤兒程序 守護程序

殭屍程序 子程序結束,父程序尚未呼叫wait 子程序資源,子程序的pcb還殘留在核心,造成資源的浪費 孤兒程序 父程序先於子程序結束,子程序成為孤兒程序,子程序修改pcb使其父程序為init程序,孤兒程序結束後,由init程序負責 其pcb資源 守護程序 daemon process 是linux中...

程序 程序組

1.程序組 1 程序組,也稱之為作業,bsd與1980年前後向unix中增加的乙個新特性,代表乙個或多個程序的集合。每個程序都屬於乙個程序組,在waitpid函式和kill函式的引數中都曾經使用到,作業系統設計的程序組的概念,是為了簡化對多個程序的管理。當父程序建立子程序的時候,預設子程序與父程序屬...

程序建立,程序等待,程序終止

1 程序建立,2 程序等待,3 程序終止 程序建立被定義為通過父程序建立子程序的過程。fork函式 函式原型 pid t fork void 特點 1.fork函式呼叫一次,返回兩次兩次返回值得區別分別是子程序當中的返回值為0,父程序當中的返回值為新建子程序的id 將id返回給父程序的原因是沒有函式...