Mit*_*ops 7 python functional-programming map multiprocessing
我目前正在对一组我要并行化的变量进行合并.我的代码看起来像这样:
mergelist = [
('leftfile1', 'rightfile1', 'leftvarname1', 'outputname1'),
('leftfile1', 'rightfile1', 'leftvarname2', 'outputname2')
('leftfile2', 'rightfile2', 'leftvarname3', 'outputname3')
]
def merger(leftfile,rightfile,leftvarname,outvarname):
do_the_merge
for m in mergelist:
merger(*m)
Run Code Online (Sandbox Code Playgroud)
通常,为了加快长循环,我会用merge之类的东西替换合并列表中的for m.
from multiprocessing import Pool
p = Pool(8)
p.map(merger(m), mergelist)
p.close()
Run Code Online (Sandbox Code Playgroud)
但是因为我正在使用星形来解包元组,所以我不清楚如何正确映射它.我怎么得到的*m?
您可以在合并函数中解压元组:
def merger(args):
if len(args) != 4:
# error
leftfile,rightfile,leftvarname,outvarname = args
do_the_merge
Run Code Online (Sandbox Code Playgroud)
另一个选项是在参数列表中解包:
def merger( (leftfile,rightfile,leftvarname,outvarname) ):
do_the_merge
Run Code Online (Sandbox Code Playgroud)
编辑:解决OP问题:
def merger((l,r,v,o)):
return l+r
for m in mergelist:
print merger(m)
Run Code Online (Sandbox Code Playgroud)
回报
leftfile1rightfile1
leftfile1rightfile1
leftfile2rightfile2
Run Code Online (Sandbox Code Playgroud)