多处理池.在其他函数内的功能上映射



说我有一个功能,可以为同一输入提供不同的结果,并且需要多次执行同一输入以获得平均值(我会绘制一个琐碎的示例,但实际上是随机性的来源是train_test_split的CC_1,如果这很重要(

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

此功能的论点是在其他函数中定义的(同样,一个琐碎的示例,请不要介意这些函数是否不是有效/pythonistic(:

define g(c,d):
    a = c
    b = c*d
    result=f(a,b)
    return(result)

我不想使用for循环,而是要使用multiprocessing来加快执行时间。我发现pool.applypool.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导致关于未定义a的错误。

有什么方法可以使池。在这种情况下映射工作?

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

>

相关内容

  • 没有找到相关文章

最新更新