程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python多進程處理數據集圖片

編輯:Python
問題遇到的現象和發生背景

使用python多進程處理一個數據集,處理函數是 對每張圖片進行加噪並保存

問題相關代碼,請勿粘貼截圖
img_paths = get_file_path(path1, path2) print("all:", len(img_paths)) # 1.pool.map avi_cpu = os.cpu_count()-30 print('there is {} cpu'.format(avi_cpu)) pool = Pool(avi_cpu) # 當前可用cpu數量 # pool.map_async(process_image, img_paths) res = [] for img in img_paths: r = [pool.apply_async(process_image, (img,))] res.append(r) #2.該情況處理時處理圖片的子進程會直接跳過 # pool = Pool(100) # cpus = os.cpu_count() # print('there is {} cpu'.format(cpus)) # 任務切分 # splits = list(divide(cpus, img_paths)) # for split in splits: # pool.apply_async(process_image, args=(split,)) pool.close() pool.join() end = time.time() print("deal data cost:", end - start)
運行結果及報錯內容

正常情況下一個進程處理一張圖片在幾百秒以內,但使用上述1代碼時在處理快結束的時候,最後幾個處理進程會變得很慢,單個進程的用時會達到幾千甚至上萬秒。搞笑的是,我之前用同樣的代碼處理另一個數據集的時候完全正常,兩個數據集的圖片數不同,圖片大小也存在差異

我的解答思路和嘗試過的方法

pool.map
pool.map_async
pool.apply_async

還有chunksize的設置,我試過設為 文件總數/cpu數,開始效果就變的更慢一些

在使用2代碼時,只會有主進程運行,跳過處理函數

我想要達到的結果

正常處理數據集,不會在最後幾個進程停頓住


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved