2015-08-15 61 views
0

我有一个字典,其中存储参数的字典。我想要做的是使用多处理将参数字典传递给一个函数。这是我想它是什么样子:虽然多处理传递参数的Python字典

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中的每个键的多处理”),但我无法将其实现到我的代码中。

我在Mac OS Yosemite上使用Python 3.4。

回答

1

你滥用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() 
+0

谢谢!我想添加一个问题,是否有可能在任务完成之前杀死处理器?我知道这是可能从我收到的答案[在这里](http://stackoverflow.com/questions/31528826/killing-a-multiprocess-pool-using-a-tkinter-button),但那是'map_async '。 – Camon

+1

是https://docs.python.org/2/library/multiprocessing.html#multiprocessing.pool.multiprocessing.Pool.terminate你在找什么? –

+0

是的,那正是我需要的。 – Camon