开发者社区> 问答> 正文

基本的并行化。创建一个worker池,所有worker并行运行相同的函数

我有以下代码

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

展开
收起
kun坤 2019-12-29 21:54:41 374 0
1 条回答
写回答
取消 提交回答
  • 你能用游泳池吗?

    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()
    
    2019-12-29 21:54:47
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载