python 多工 學習三

2022-06-18 11:48:10 字數 1963 閱讀 9262

多程序

概念

程序就是程式(.exe)檔案執行並且系統給予分配資源後的統稱(程序就是系統分配的最小資源)。  

對於作業系統來說,乙個任務就是乙個程序(process),比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序,開啟乙個記事本就啟動了乙個記事本程序,開啟兩個記事本就啟動了兩個記事本程序,開啟乙個word就啟動了乙個word程序。

在這裡,我們所說的多程序,是乙個程式執行後,在主程序中新建子程序,每個程序雖然只有乙個執行緒,但多個程序可以一塊執行多個任務。。

程序的建立及應用:

通過multiprocessing建立子程序,主程序會等待子程序執行完後才結束。

結果:

多工,程序之間通訊

乙個程序中建立多個子程序,程序之間是相互獨立的。

如,全域性變數 a=0, 每個子程序在執行各自**時,通過 a+=1來改變全域性變數的值,但每個子程序都是從0開始+1,一直到結束,程序之間變數改變後並不會互相共享。

1. 佇列(queue)

佇列,是可以幫助子程序之間相互通訊的方法。

特點: 1. 在記憶體中開闢佇列,執行速度快。 2. 可以設定佇列中的資料個數  3.  先進先出,有序的    ......

2. 程序池 pool

建立程序池及其中的子程序,主程序不會等待其結束,自己就會先結束,需要用join來等待(必須放在close,關閉程序池之後)。

想要同時進行的任務數量不多時,可以使用multiprocessing.process來單獨建立程序;

想要同時進行的工作很多,如複製乙個資料夾下的所有檔案,這時如果要同時複製多個檔案,那需要建立的程序數會很多,資源浪費嚴重。這時,就需要程序池。

程序池,可以看成兩部分:程序池和任務佇列。

程序池-->先建立乙個空的程序池物件,規定裡邊可以建立多少個程序數量。

任務佇列-->將所有任務獲取並儲存,程序池中有空閒位置時,新增下乙個任務到程序池,任務執行成為程序。

3. 例項:多工copy資料夾下的檔案

目的: 資料夾 imgs中包含影象100張, 使用 多程序 + 佇列 實現多工copy及進度計算

注意: 在使用multiproceesing模組下程序池庫功能pool時,原本需要使用multiprocessing.queue呼叫的佇列,此處改為使用multiprcessing下的manager類中的queue功能,具體如下呼叫

補充: 使用queue佇列,.get()阻塞等待 , 所以可以省略主程序中的po.join()

多工學習

最近一段時間multitask網路比較流行,比如做人臉檢測的時候,乙個網路完成 人臉和非人臉 二分類任務的同時也要進行boudingbox回歸或者人臉關鍵點回歸。以人臉檢測mtcnn為例,乙個網路包含三個任務。訓練的時候,乙個batch中的,一部分用於二分類 一部分用於boundingbox 回歸,...

多工學習

以人臉特徵點定位中的tcdcn模型 1 為例子,該模型思想 通過一些多樣的精細的任務,來優化提公升特徵點定位精度。就是在人臉特徵點檢測的時候,同時進行多個任務的學習,這些子任務包括 是否帶眼鏡,是否微笑和臉部的朝向等分類任務。使用這些輔助的屬性不僅可以起到一次性獲取感興趣的屬性,更重要的是子任務更好...

多工學習

什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。打個比方,你一邊在用瀏覽器上網,一邊在聽 一邊在用word趕作業,這就是多工,至少同時有3個任務正在執行。還有很多任務悄悄地在後台同時執行著,只是桌面上沒有顯示而已。現在,多核cpu已經非常普及了,但是,即使過去的單核cpu,也可以執行多...