日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

python应用实例论文_番外篇——Python多进程应用实例一则

發(fā)布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python应用实例论文_番外篇——Python多进程应用实例一则 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:

現(xiàn)在的電腦普遍進(jìn)入多核時代,當(dāng)我們需要做一些計(jì)算密集型任務(wù)時,運(yùn)用并行計(jì)算能夠發(fā)揮CPU的性能,也夠大大的節(jié)省我們的時間。在現(xiàn)在的數(shù)據(jù)挖掘中,Python是一門非常強(qiáng)大的語言,語法直接明了,易于上手。今天我們就用Python的Multiprocessing庫來做個簡單的應(yīng)用實(shí)例分析。

1. 簡單的背景介紹

1.1 數(shù)據(jù)處理目標(biāo)

首先筆者有很多的圖像數(shù)據(jù)需要處理,例如Fig.1 所示。數(shù)據(jù)處理目標(biāo)是獲取背景面板上水位數(shù)據(jù),采用的方法是OpenCV的。篇幅有限(筆者太懶),本文就不介紹具體的實(shí)現(xiàn)過程,在代碼中封裝為img_processing 函數(shù),輸入?yún)?shù)為文件名,輸出為水位及相關(guān)的時間戳等數(shù)據(jù)。

Fig. 1 原始圖片實(shí)例

1.2 Multiprocessing的實(shí)現(xiàn)方法

由于筆者有較多的數(shù)據(jù),約32000張圖片,數(shù)據(jù)處理時間較長。同時鑒于筆者的工作電腦CPU為8核,內(nèi)存為32GB,筆者計(jì)劃采用多進(jìn)程的方法來加速計(jì)算。在本文中主要用到了Multiprocessing的Pool方法,具體的介紹可見多進(jìn)程-廖雪峰的官方網(wǎng)站。

另外,為了測試與比較不同CPU核數(shù)的工作效率,筆者將多進(jìn)程方法封裝為multiProcessingTest函數(shù),輸入?yún)?shù)為CPU核數(shù)與圖片文件數(shù)量,輸出為對應(yīng)的代碼工作時間。詳細(xì)代碼如下所示:

def multiProcessingTest(coreNum,filenameList):

# 測試不同CPU核數(shù)和圖片數(shù)量下的消耗時間。

# cores from 1 to 8

# 圖片數(shù)量: selected numbers range from 1 to 30000. start_time = time.time()

p = Pool(coreNum) # cores from 1 to 8

results = p.map(img_processing, filenameList)

p.close()

p.join()

callapsTime = time.time() - start_time

return callapsTime

2. 結(jié)果與分析

Fig. 2 展示了不同圖片文件數(shù)量下,不同CPU核數(shù)的計(jì)算消耗時間。由圖可見,隨著文件數(shù)量的增加,單核(即Core 1)消耗的時間劇烈增加:1000圖片時,消耗時間在10s以內(nèi);到50,000圖片時,時間增加到187s;300,000圖片時,消耗時間長達(dá)5300.2s,約1.47小時。

Fig. 2 Collapsed time at different cores and file sizes

如果我們采用多核并行計(jì)算,消耗時間大大減少。Fig. 1 可以看出多核計(jì)算時面積明顯小于單核計(jì)算的面積,并且CPU核數(shù)越多,消耗的時間越少。例如,當(dāng)我們有100,000圖片文件時,單核計(jì)算需要403.4s,雙核需要268.7s,4核需要158.4s,而8核僅需100.8s。

通過計(jì)算8核消耗時間與單核時間的百分比,見圖3, 我們發(fā)現(xiàn)一個有趣的現(xiàn)象。大量數(shù)據(jù)時,例如30,000個文件,8核消耗的時間僅占單核的5.2%,即8核能夠節(jié)省至少94%的計(jì)算時間。但是,當(dāng)文件數(shù)量較少時,例如1000個圖片文件,8核反而消耗了更多的時間。這個是因?yàn)橄到y(tǒng)將任務(wù)分配也需要一定的資源,當(dāng)文件數(shù)量較少時,分配任務(wù)的時間占比重較大,反而真正計(jì)算的時間相對較少,所以CPU核數(shù)多消耗的時間更多。因此,我們也能得出結(jié)論,并不是CPU越多效率越高。

Fig. 3 Percentile of collpased time of 8 cores over 1 core at different image file sizes

如果并不是CPU核數(shù)越多效率越高,那么在大量圖片文件時,多少CPU的效率最高呢?我們同樣可以計(jì)算, 在300,000個文件下,平均每個CPU核數(shù)的速度(file processing per second per core),如Fig.4 所示。我們可以看出在雙核時單個CPU的效率最高,隨著CPU核數(shù)的增多,速度稍有降低。個人猜測,由于系統(tǒng)分配任務(wù)消耗的資源隨CPU核數(shù)的增加而增加,當(dāng)核數(shù)較多時,分配任務(wù)消耗的資源更大,某種程度上拖慢了CPU的工作效率。但是,需要注意的是,核數(shù)較多時,整體速度還是更快的,消耗的資源也更多。如何取舍效率與速度,需要讀者朋友們自己斟酌了。

Fig. 4 Image processing speed per CPU core

3. Take-home pointsPython 可以用簡單的代碼引入多進(jìn)程計(jì)算,大大降低計(jì)算密集型算法消耗的時間;

核數(shù)越多并不代表速度越快,數(shù)據(jù)量的大小是重要的參考因素;

在大量數(shù)據(jù)背景下,雙核效率最高,核數(shù)越多速度越快,效率與速度的抉擇需要讀者自己取舍。

Thanks for reading.

PS:筆者為Python愛好者,對Python了解并沒有特別深入,如有不足之處,歡迎指出,敬請諒解。

總結(jié)

以上是生活随笔為你收集整理的python应用实例论文_番外篇——Python多进程应用实例一则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。