簡體   English   中英

將變量傳遞給並行化函數

[英]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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM