Python pathos mutiprocessing,一个列表和一个对象作为参数

时间:2018-02-09 01:06:39

标签: python python-multiprocessing

我想使用多处理来加速对函数的多次调用,该函数将两个值作为参数,一个为每次计算而变化的变量和一个常量变量。

这是一个模拟我的问题的代码:

import pathos.pools as pp
p = pp.ProcessPool(4)

def add(x,y):
   return x+y

x = [0,1,2,3]
y = 5

result = p.map(add, x, y)

由于y不是列表,我收到以下错误:

TypeError: izip argument #2 must support iteration

在这个简单的例子中,直接的解决方案是使y成为常量值的列表:

y = [5 for value in x]

但是我想避免这个解决方案,因为在我的情况下,y是一个复杂的对象,占用了相当大的一块内存。

感谢您的任何建议

1 个答案:

答案 0 :(得分:0)

您可以只对声明的函数使用局部变量。我经常做一个包装来传递不可迭代的内容,例如

def add(x,y):
    return x+y

def add_wrapper(x):
    y = 5
    return add(x,y)

x = [0,1,2,3]
result = p.map(add_wrapper, x)

def add(x,y):
    return x+y

def add_wrapper(x):
    return add(x,y)

y = 5
x = [0,1,2,3]
result = p.map(add_wrapper, x)