>我有以下代码
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
我有一个计算东西的类。我有 4 个处理器。所以我想用值 20 实例化这个类 4 次。这 4 个具有相同输入的相同类然后并行计算一些东西。为了确保它异步工作,我想在控制台中看到 4 次嗨,过了一会儿 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()