Python並行處理充分利用CPU實現加速

最近在用Python處理公共的圖像數據庫,由於數據量比較大,一張張串行處理圖片時間太久了。因此,決定採用並行的方式來充分利用主機上的CPU來實現處理過程的加速,可以大大減少總的處理時間。

這裏採用的是concurrent.futures模塊,它可以利用multiprocessing實現真正的平行計算。

核心原理是:concurrent.futures會以子進程的形式,平行的運行多個python解釋器,從而令python程序可以利用多核CPU來提升執行速度。由於子進程與主解釋器相分離,所以他們的全局解釋器鎖也是相互獨立的。每個子進程都能夠完整的使用一個CPU內核。

具體實現起來也非常簡單,代碼如下。主機有多少CPU核心,就會啓動多少Python進程並行處理。

import concurrent.futures


def function(files):
    # To do what you want
    # files: file list that you want to process


if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        executor.map(function, files)

改成並行處理後,我的12塊CPU滿負荷運行,處理速度明顯加快。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章