基本并行化。创建一个工人池,所有工人 运行 并行执行相同的功能

Basic parallelization. Create a pool of workers and all of them run the same function in parallel

我有以下代码

class calculator:
    def __init__(self, value):
      print("hi")
      result = self.do_stuff()
      print(result)
if __name__ == '__main__':
  calculator(20) # I want to do this 4 times in parallel

我有一个 class 可以计算东西。我有 4 个处理器。所以我想用值 20 实例化这个 class 4 次。这 4 个相同的 class 具有相同的输入,然后并行计算一些东西。为确保它异步工作,我想在控制台中看到 4 次 hi 并在短时间内看到 4 次结果。

但我真的不知道如何使用

 import multiprocessing as mp

好像只能并行化定义所以我加了定义

def start_calculator(value):
    calculator(value)

现在主要是

if __name__ == '__main__':
p1 = mp.Process(target=start_calculator, args=(20,))
p2 = mp.Process(target=start_calculator, args=(20,))
p3 = mp.Process(target=start_calculator, args=(20,))
p4 = mp.Process(target=start_calculator, args=(20,))
p1.start()
p2.start()
p3.start()
p4.start()
p1.join()
p2.join()
p3.join()
p4.join()

但这看起来非常糟糕。

我能否以某种方式创建 4 个进程,然后在循环中启动它们 然后加入他们,而不是每次都写 p1,p2,p3,p4。 而且我还想让它可变为只有 2 个进程等。所以我不能像这样硬编码它

理想情况下,我会有一个包含固定数量进程的数组,然后异步地为它们提供函数。如果一个过程完成,我将能够再次赋予它该功能

你可以使用游泳池吗?

pool = mp.Pool(4) #with no argument it takes the maximum
args = [20.,20.,20.,20.]
output = pool.map(start_calculator,args)
pool.close()
pool.join()