我想使用多处理来加速对函数的多次调用,该函数将两个值作为参数,一个为每次计算而变化的变量和一个常量变量。
这是一个模拟我的问题的代码:
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是一个复杂的对象,占用了相当大的一块内存。
感谢您的任何建议
答案 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)