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