当前位置 博文首页 > 一杯凉白开:python multiprocessing pool.map传递多个参数

    一杯凉白开:python multiprocessing pool.map传递多个参数

    作者:[db:作者] 时间:2021-09-10 16:35

    针对一些特殊需求,需要对map函数传递两个或者多个参数,这时单纯的map函数已经不能满足需求了,就需要借助偏函数来完成。

    1.偏函数partial

    偏函数是python自带的包,直接导入就能用。

    偏函数partial的第一个参数就是所承载的原函数,之后原函数的参数再依次传入partial函数。

    例子

    # -*- coding: utf-8 -*-
    from functools import partial
    
    
    def calsum(a, b):
        return a + b
    
    # 承载calsum函数,并传入第一个参数
    para = partial(calsum, 3)
    
    # 传递第二个参数,就是把2传给para
    res = para(2)
    
    # 输出最后的结果
    print(res)
    
    # 5
    

    2.pool.map应用

    举个例子说明:

    首先先定义一个列表,里面存放着整数,之后计算这个列表的均值,用多进程判断列表里的每个数字与均值的大小,比均值大输出1,反之输出0.

    # -*- coding: utf-8 -*-
    from multiprocessing import Pool
    # 导入偏函数
    from functools import partial
    import numpy as np
    
    
    def adjust(mean, number):
        if number > mean:
            return 1
        else:
            return 0
    
    
    if __name__ == "__main__":
        num_list = [12, 45, 67, 88, 99, 62]
        # 计算均值
        num_mean = np.mean(num_list)
        # 定义进程池
        pool = Pool(4)
        # 定义偏函数,并传入均值
        pfunc = partial(adjust, num_mean)
        # 执行map,传入列表
        res_list = pool.map(pfunc, num_list)
        print(res_list)
    

    输出结果:

    [0, 0, 1, 1, 1, 0]
    
    cs