繁体   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