推荐一个多进程处理库,在一些数据量非常大的情况下,内存没办法一次性加载处理all data,这时候就会想到用多进程来分块处理数据,而python中也支持multiprocessing,因此已multiprocessing作为底层支持开发了如今的库,在需要处理大量数据的情况,可以显著提高数据处理速度。感兴趣的小伙伴可以访问下面的网址。
网址:https://pypi.org/project/parallel-processor/
parallel-processor介绍
思想
这个库的核心思想是将输入数据划分成多个子数据块,然后使用多进程并行处理这些数据块,最后将处理结果合并成一个数据块。这个方法旨在加速数据处理过程,特别是当需要对大量数据进行处理时。
实现过程:
process_data
函数是主要的接口,它接受输入数据,处理函数,进程数,数据类型,批次大小等
process_data(data, op_func, num_workers=1, data_type='list', batch_size=32, **kwargs):
"""
Args:
data: 输入数据(可以是一个ndarray、list以及一个tuple(e.g. (X, Y)),
当输入数据为tuple时,需要在**kwargs中设置参数is_tuple_data为True,否则默认为)
op_func: 处理函数,用于操作数据
num_workers: 进程数
data_type: 数据类型('array'|'list', default 'list')
batch_size: 每个批次的大小
**kwargs: 其它参数,op_func函数的参数
"""
返回结果:
process_data
函数的返回结果是经过多进程处理后的数据,其结构和输入数据类型相同。处理结果包括操作函数op_func
处理后的所有数据块的合并。
使用
导包
from parallel_processor import process_data
简单例子
# 需要对数据处理的函数,自定义
def func(x, pow=2):
new = []
for xx in x:
new.append(xx ** pow)
return new
# 调用process_data()实现多进程处理
x = [1000000,10203232103]
# x的的传入方式有list,numpy,pandas三种方式
y = process_data(x, func, func_kwargs={'pow': 2})
# y=[1000000000000, 104105945347689802609]