我有以下代码
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倍的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个进程,等等。所以我不能像这样硬编码 理想情况下,我应该有一个具有固定数量进程的数组,然后我将函数异步地提供给它们。如果一个过程完成了,我就可以再给它一个函数 问题来源StackOverflow 地址:/questions/59379665/basic-parallelization-create-a-pool-of-workers-and-all-of-them-run-the-same-fun
你能用游泳池吗?
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()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。