在其他函数内部的函数上的multiprocessing pool.map

时间:2019-05-17 22:04:12

标签: python python-3.x multiprocessing

说我有一个函数,可以为同一输入提供不同的结果,并且需要对同一输入执行多次才能获得均值(我将举一个简单的例子,但实际上随机性的来源是{{1 }}来自train_test_split,如果重要的话

sklearn.model_selection

此函数的参数是在另一个函数中定义的,就像这样(同样是一个简单的示例,请不要介意它们是否无效/ pythonistic):

define f(a,b):
    output=[]
    for i in range(0,b):
        output[i] = np.mean(np.random.rand(a,))
    return np.mean(output)

我不想使用define g(c,d): a = c b = c*d result=f(a,b) return(result) 循环,而是想使用for来加快执行时间。我发现multiprocessingpool.apply都不起作用(执行时间增加),只有pool.startmap有效。但是,只能接受一个参数(在这种情况下为迭代次数)。我尝试如下重新定义pool.map

f

然后按如下所示使用define f(number_of_iterations): output=np.mean(np.random.rand(a,)) return output

pool.map

基本上,这是一个使import multiprocessing as mp define g(c,d): temp=[] a = c b = c*d pool = mp.Pool(mp.cpu_count()) temp = pool.map(f, [number_of_iterations for number_of_iterations in b]) pool.close() result=np.mean(temp) return(result) 成为单参数函数的复杂解决方案。希望f仍会接受参数f,但是执行a会导致出现有关未定义g的错误。

有什么方法可以使pool.map在这种情况下工作?

1 个答案:

答案 0 :(得分:0)

我认为functool.partial解决了您的问题。这是一个实现:https://stackoverflow.com/a/25553970/9177173这里是文档:https://docs.python.org/3.7/library/functools.html#functools.partial