[英]multiprocessing in python (going from a for loop to multiprocessing for loop)
[英]Multiprocessing a loop in Python
我有以下代碼,我想加快(使用多處理)。
def main(arg1):
data=[]
#Calculate new argument arg2
for i in range(n):
data.append(function(z,i,arg2))
其中z
在2D數組中。 我的想法是按照以下方式進行,但我不確定這會加快這個過程。
from multiprocessing import Pool
import itertools
def function_star(a_b_c):
return function(*a_b_c)
def main(arg1):
#Calculate new argument arg2
pool=Pool()
i=range(n)
out=pool.map(function_star, i, itertools.repeat(z),itertools.repeat(arg2) )
pool.close()
if __name__=="__main__":
main(arg1)
這確實是加速這一進程的最有效方式嗎?
如果我正確地解釋你的代碼塊,你想讓function
調用始終是相同的z
和arg1
但是i
是一個范圍(我有點不確定,因為你粘貼的代碼不起作用,因為map
只需要一個iterable而你'給予3)
如果是這種情況,那么partial
解決您的問題:
from multiprocessing import Pool
from functools import partial
def function(i, z, arg2):
print(z, i, arg2)
def main(arg1):
#Calculate new argument arg2
pool=Pool()
i=range(n)
out=pool.map(partial(function, z=5, arg2=3), i)
pool.close()
if __name__=="__main__":
main(arg1)
請注意,您需要更改函數中參數的順序,以便更改i
參數位於第一個位置。
如果你關心速度,你應該添加第三個參數來map
chunksize。 這使得進程要求來自主進程的chunksize
數據包,因此主進程和子進程之間的通信數量較少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.