簡體   English   中英

在Python中多處理循環

[英]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調用始終是相同的zarg1但是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.

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