将变量传递给并行函数

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))