具有不同功能的多进程池

新手上路,请多包涵

多进程工作池的大多数示例在不同的进程中执行单个功能,fe

 def foo(args):
   pass

if __name__ == '__main__':
   pool = multiprocessing.Pool(processes=30)
   res=pool.map_async(foo,args)

有没有办法处理池中两个不同且独立的函数?这样您就可以为 foo() 分配 fe 15 个进程,为 bar() 分配 15 个进程,或者池是否绑定到单个函数?或者你必须手动为不同的功能创建不同的流程

 p = Process(target=foo, args=(whatever,))
 q = Process(target=bar, args=(whatever,))
 q.start()
 p.start()

忘了工人池?

原文由 dorvak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 413
2 个回答

要传递不同的功能,您只需多次调用 map_async 即可。

这是一个例子来说明,

 from multiprocessing import Pool
from time import sleep

def square(x):
    return x * x

def cube(y):
    return y * y * y

pool = Pool(processes=20)

result_squares = pool.map_async(f, range(10))
result_cubes = pool.map_async(g, range(10))

结果将是:

 >>> print result_squares.get(timeout=1)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> print result_cubes.get(timeout=1)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

原文由 Ocaj Nires 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 map 或某些 lambda 函数(编辑:实际上您不能使用 lambda 函数)。您可以使用一个简单的地图功能:

 def smap(f, *args):
    return f(*args)

pool = multiprocessing.Pool(processes=30)
res=pool.map(smap, function_list, args_list1, args_list2,...)

法线 贴图 函数将可迭代对象作为输入,这很不方便。

原文由 Rayamon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题