将变量传递给并行函数
Passing variables to parallelized function
我正在并行化矩阵的生成,其中矩阵中的每个元素都由函数 fun 计算。如果我传递给这个函数的唯一东西是索引 i 和 j,我就能让它工作。但是,我想将另一个变量传递给此函数,比如 x,我该怎么做?
我正在使用 Python 2.7
import numpy as np
import multiprocess as mp
import itertools
p = mp.Pool()
def fun((i,j)):
print i,j
prod = i * j
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
combs = ((i,j) for i,j in itertools.product(xrange(5), repeat=2) if i <= 5)
result = p.map(fun, combs)
p.close()
p.join()
newresult = np.array(result).reshape(5,5)
print newresult
def fun((i,j,x)):
print i,j,x
prod = i * j * x
return prod
为什么会这样:您实际上只是将一个对象传递给函数,结果是一个元组。 def fun((i,j)) 只是简单地将元组从对象中分离出来。因此,要回答您的问题,您只需向元组添加另一个元素即可,效果很好。
更清晰地展示您正在做的事情:
def fun(data):
i,j,x = data
print i,j,x
prod = i * j * x
return prod
data = (2,4,10)
print(fun(data))
或者您可以这样做:
def fun((i,j), x):
print i,j, x
prod = i * j * x
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
print(fun((2,4), 10))
我正在并行化矩阵的生成,其中矩阵中的每个元素都由函数 fun 计算。如果我传递给这个函数的唯一东西是索引 i 和 j,我就能让它工作。但是,我想将另一个变量传递给此函数,比如 x,我该怎么做?
我正在使用 Python 2.7
import numpy as np
import multiprocess as mp
import itertools
p = mp.Pool()
def fun((i,j)):
print i,j
prod = i * j
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
combs = ((i,j) for i,j in itertools.product(xrange(5), repeat=2) if i <= 5)
result = p.map(fun, combs)
p.close()
p.join()
newresult = np.array(result).reshape(5,5)
print newresult
def fun((i,j,x)):
print i,j,x
prod = i * j * x
return prod
为什么会这样:您实际上只是将一个对象传递给函数,结果是一个元组。 def fun((i,j)) 只是简单地将元组从对象中分离出来。因此,要回答您的问题,您只需向元组添加另一个元素即可,效果很好。
更清晰地展示您正在做的事情:
def fun(data):
i,j,x = data
print i,j,x
prod = i * j * x
return prod
data = (2,4,10)
print(fun(data))
或者您可以这样做:
def fun((i,j), x):
print i,j, x
prod = i * j * x
# what if I want to have a variable x in this function
# prod = i * j * x
return prod
print(fun((2,4), 10))