如何处理**kwarg直接传递到多处理池?

2024-10-03 15:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把kwargs传递给multiprocessingPool。向函数传递kwargs是可行的,但使用多处理则不行

在这种情况下如何使用kwargs

这是我的密码:

from sklearn.model_selection import ParameterGrid
import multiprocessing
from multiprocessing import Pool
from multiprocessing import cpu_count

abc = [13, 15]
xyz = [2,3,5]

parameterGridDic = [{
    'abc': abc,
    'xyz': xyz
}]

def myFunc(**kwargs):
    return kwargs['xyz'], kwargs['abc']

if __name__ == '__main__':
    multiprocessing.freeze_support()

    parameterGrid = ParameterGrid(parameterGridDic)
    parameterGridList = list(parameterGrid)

    for parameterGridEntry in parameterGridList:
        myResult = myFunc(**parameterGridEntry)
        print("myResult:", myResult)


    pool = Pool(cpu_count())
    myResult2 = pool.map(myFunc,**parameterGridList)

    print("myResult2:", myResult2)

这将产生以下输出:

myResult: (2, 13)
myResult: (3, 13)
myResult: (5, 13)
myResult: (2, 15)
myResult: (3, 15)
myResult: (5, 15)

...

    myResult2 = pool.map(myFunc,**parameterGridList)
TypeError: map() argument after ** must be a mapping, not list

Tags: fromimportmapcpumyfuncmultiprocessingkwargsabc