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