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