Python的並行處理模塊multiprocessing,把你的處理速度翻N倍

深度學習中,我們常常需要處理海量的數據

所以爲了節約時間,要充分壓榨CPU/GPU的計算能力,那並行處理是不可少的!

而萬能的 Python 自帶一個非常簡單易用的並行處理模塊:multiprocessing,這裏介紹其中一種用法

這種用法非常適合嵌入到深度學習數據處理中

程序實現:

from multiprocessing import cpu_count, Pool
import numpy as np
import time

# cpu 數量
cores = cpu_count()
# 分塊個數
partitions = cores
print("cores' num: %d" % partitions)

def parallelize(data, func):
    """
    多核並行處理模塊
    :param df: DataFrame數據
    :param func: 預處理函數
    :return: 處理後的數據
    """
    # 數據切分
    data_split = np.array_split(data, partitions) # 這裏把數據按照核心數N,分成N份
    # 進程池
    pool = Pool(cores)
    # 數據分發 合併
    data = pool.map(func, data_split) # 把數據,和要處理數據的函數,分別導入對應的進程池
    # 關閉進程池
    pool.close()
    # 執行完close後不會有新的進程加入到pool,join函數等待所有子進程結束
    pool.join()
    return data

def double(num):
    time.sleep(5) # 休眠 5 秒
    return num*2

data_raw = list(range(16))

time_start = time.time()

results = parallelize(data_raw,double)

time_end = time.time()
print('results:',results)
print('process time:',time_end-time_start)

運行結果:

cores' num: 4
results: [array([0, 2, 4, 6]), array([ 8, 10, 12, 14]), array([16, 18, 20, 22]), array([24, 26, 28, 30])]
process time: 5.113263130187988

這裏我的計算機CPU是4核的,所以數據處理分了 4 個進程,最後的結果自然是處理效率高了 4 倍!

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