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 倍!

Tags: