推荐一个多进程处理库,在一些数据量非常大的情况下,内存没办法一次性加载处理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]