通过多处理传递 python 参数字典

Passing python dictionary of parameters though multiprocessing

我有一本字典,其中存储了参数字典。我想要做的是使用 multiprocessing 将参数字典传递给函数。这就是我想要的样子:

from multiprocessing import Pool

# Dictionary with dictionaries of parameters:
my_dict = {"one":{"parm1":1, "parm2":2, "parm3":3}, "two":{"parm1":4, "parm2":5, "parm3":6}, "three":{"parm1":7, "parm2":8, "parm3":9}}

def function(parm1, parm2, parm3):  # Function that is called during multiprocessing.
    print(parm1, parm2, parm3)
    print(parm1 * parm2 * parm3)

def store_info(a):  # The callback function.
    print(a)

p = Pool(4)  # Setting up the number of CPU's to use.

for key, value in my_dict.items():  # For loop used to separate keys from values.
    print(value)
    data = p.map_async(function, **value, callback=store_info)

我使用 **value 表示我希望字典中的那些值通过函数传递。我知道它不能在那里使用。

我的问题:如何通过多处理传递参数字典?

我在[这里](Python multiprocessing for each key in dictionary"Python multiprocessing for each key in dictionary") 找到了一些信息,但我无法将其实现到我的代码中。

我在 Mac OS Yosemite.

上使用 Python 3.4

您误用了 map_async - 您想要使用 apply_async

from multiprocessing import Pool

def function(parm1, parm2, parm3):  # Function that is called during multiprocessing.
    print parm1, parm2, parm3
    print parm1 * parm2 * parm3
    return parm1 * parm2 * parm3

def store_info(a):  # The callback function.
    print a

if __name__ == "__main__":
    # Dictionary with dictionaries of parameters:
    my_dict = {"one":{"parm1":1, "parm2":2, "parm3":3}, "two":{"parm1":4, "parm2":5, "parm3":6}, "three":{"parm1":7, "parm2":8, "parm3":9}}

    p = Pool(4)  # Setting up the number of CPU's to use.

    for key, params_dict in my_dict.items():  # For loop used to separate keys from values.
        print params_dict
        p.apply_async(function, args=tuple(), kwds=params_dict, callback=store_info)

    p.close()
    p.join()