lambda函数在多进程中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lambda函数在多进程中不起作用相关的知识,希望对你有一定的参考价值。
我正在尝试将lambda函数用于多进程中的多个参数。但是,它不能正常工作。没有运行时错误,但是根据活动监视器,CPU无法在python上运行。但是,repeat
功能正常工作。我的代码如下所示
def testfun(a,b,c,d,e,f):
for i in range(100000000):
pass
return a+b+c+d+e+f
def multi_process_tfem(a, b, ksis, w, wn, k):
args = ((a, b, ksi, w, wn, k) for ksi in ksis)
with concurrent.futures.ProcessPoolExecutor() as executor:
#results = executor.map(testfun, repeat(a), repeat(b), ksis, repeat(w), repeat(wn), repeat(k)) # working
results = executor.map(lambda args: testfun(*args), args) # not working
rho = np.array(list(results))
return rho
答案
在模块multiprocessing中,可以使用starmap代替map
和lambda
。但似乎concurrent
没有。但是,当您尝试在lambda
中使用multiprocessing
时,它表明它无法腌制lambda
函数以将其发送给进程-并且在concurrent
中也可能会出现问题,但它不会显示。
您可以将其作为一个参数并在函数中解压缩
def testfun(args):
a,b,c,d,e,f = args
return a+b+c+d+e+f
或者您必须将其定义为普通函数
def unpack_testfun(args):
return testfun(*args)
并使用它代替testfun
executor.map(unpack_testfun, args)
示例代码
import concurrent.futures
def testfun1(args):
a,b,c,d,e,f = args
return a+b+c+d+e+f
def multi_process_tfem1(a, b, ksis, w, wn, k):
args = ((a, b, ksi, w, wn, k) for ksi in ksis)
with concurrent.futures.ProcessPoolExecutor() as executor:
results = executor.map(testfun1, args)
return list(results)
print(multi_process_tfem1(1,1,[1,2,3],1,1,1))
# ---
def testfun2(a,b,c,d,e,f):
return a+b+c+d+e+f
def unpack(args):
return testfun2(*args)
def multi_process_tfem2(a, b, ksis, w, wn, k):
args = ((a, b, ksi, w, wn, k) for ksi in ksis)
with concurrent.futures.ProcessPoolExecutor() as executor:
results = executor.map(unpack, args)
return list(results)
print(multi_process_tfem2(1,1,[1,2,3],1,1,1))
以上是关于lambda函数在多进程中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
onRequestPermissionsResult 在片段中不起作用