как повторить функцию с некоторыми аргументами для некоторого процесса с помощью pool.starmap - PullRequest
1 голос
/ 28 мая 2020

Я использовал многопроцессорность в 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))

Как я могу использовать звездную карту для повторения функции с двумя фиксированными списками в качестве аргументов? Есть ли другой способ сделать это?

1 Ответ

1 голос
/ 28 мая 2020

Поскольку функция полностью использует оба списка (а не комбинацию элементов из каждого списка), вам не нужно использовать starmap. Вместо этого вы можете создать частичную функцию и использовать ее с 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))
...