如何在带有pool.starmap的某些进程上重复带有某些参数的函数

问题描述 投票:1回答:1

[我在python中使用了多重处理,以一个数字作为输入在某些内核上重复执行功能1000次,并且使用了代码:

def GradientProccess(m):
    x=random.seed(os.getpid()*m)
    print(random.seed(os.getpid()*m))
      .
      .
      .
    return()

if __name__ == '__main__':         
    __spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)"       

    with Pool(processes=8) as pool:

        result=pool.map(GradientProccess,range(1000))

但是现在我将使用多重处理以2个列表作为函数的输入来重复该函数。我想使用starmap,但如何重复1000次?我写了这段代码,但是它是不正确的:

 def GradientProccess(m,list1,list2):
        x=random.seed(os.getpid()*m)
        print(random.seed(os.getpid()*m))
          .
          .
          .
        return()

    if __name__ == '__main__':         
        __spec__ = "ModuleSpec(name='builtins', loader=<class '_frozen_importlib.BuiltinImporter'>)"       
        list1=[4,3]
        list2=[5,7]
        with Pool(processes=8) as pool:

            result=pool.starmap(GradientProccess,[list1,list2],range(1000))

如何使用starmap重复一个带有2个固定列表作为参数的函数?还有其他方法吗?

python multiprocessing
1个回答
1
投票

由于该函数完全消耗了两个列表(而不是每个列表中元素的组合),因此不需要使用starmap。相反,您可以创建一个partial function并将其与map一起使用,如下所示。

def gradiant_process(m, l1, l2):
    ...

with Pool(processes=8) as pool:
    ...
    import functools
    partial_gp = functools.partial(gradient_process, l1=list1, l2=list2)
    result = pool.map(partial_gp, range(1000))
热门问题
推荐问题
最新问题