将变量传递给并行函数

时间:2018-04-12 22:49:35

标签: python matrix parallel-processing multiprocess

我正在并行化矩阵的生成,其中矩阵中的每个元素都是通过函数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

1 个答案:

答案 0 :(得分:2)

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