从多处理池函数返回值

Posted

技术标签:

【中文标题】从多处理池函数返回值【英文标题】:Returning values from multiprocessing Pool function 【发布时间】:2021-07-19 12:14:24 【问题描述】:

我想使用 pool 并行运行一个循环,并将函数返回的每个结果存储到 numpy 数组的索引中。我这里写了一个基本的函数,真实的有点复杂。即使在这个基本的版本中,我也没有得到想要的输出。通过在最后打印结果,我得到了 100 个不同的 100 个值数组,而不是一个 100 个值的数组。我该如何解决这个问题,或者是否有更好的方法来存储返回值。因为我必须在池后取一个均值和标准的拒绝。


from multiprocessing import Pool
import numpy as np
rejects = np.zeros(100)

def func(i):
    print("this is:",i)
    rejects[i]=i
    # print (rejects)
    return rejects




def main():

    
    l = [*range(1,100, 1)]
    pool = Pool(3)
    results=pool.map(func, l)
    pool.close()
    pool.join()
    print (results)
if __name__ == '__main__':
    main()

【问题讨论】:

【参考方案1】:

因为您向func 提供了一个数组参数,并将该数组分配为数组rejects 中的单个元素。你可以使用下面的func

def func(i):
    print("this is:",i)
    rejects=i # this is where I have changed
    # print (rejects)
    return rejects

【讨论】:

以上是关于从多处理池函数返回值的主要内容,如果未能解决你的问题,请参考以下文章

Python网编_进程池的回调函数

函数的返回值函数的调用函数的参数

函数的返回值与参数

函数基础之函数的返回值04

golang-redis系列——返回值助手函数(二)

C 语言字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 形参返回值 | 函数返回值 | 函数形参处理 | 形参指针判空 )