基本并行化。创建一个工人池,所有工人 运行 并行执行相同的功能
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()
我有以下代码
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()