Python多处理 - 从3个不同的函数返回值[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python多处理 - 从3个不同的函数返回值[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我需要并行执行3个函数并从每个函数中检索一个值。

这是我的代码:

def func1():
   ...
    return x

def func2():
   ...
    return y

def func3():
   ...
    return z


p1 = Process(target=func1)
first = p1.start()
p2 = Process(target=func2)
second= p2.start()
p3 = Process(target=func3)
third = p3.start()
p1.join()
p2.join()
p3.join()

但是第一,第二和第三似乎是'NoneType'对象。

我的代码有什么问题?

谢谢

答案

有几种不同的方法可以解决这个问题。最简单的是使用multiprocessing.Poolapply_async函数:

from multiprocessing import Pool

def func1():
    x = 2
    return x

def func2():
    y = 1
    return y

def func3():
    z = 5
    return z

if __name__ == '__main__':
    with Pool(processes=3) as pool:
        r1 = pool.apply_async(func1, ())
        r2 = pool.apply_async(func2, ())
        r3 = pool.apply_async(func3, ())

        print(r1.get(timeout=1))
        print(r2.get(timeout=1))
        print(r3.get(timeout=1))

multiprocessing.Pool是一个有用的构造,它通过设置管道和队列以及需要什么来处理进程之间的底层通信。最常见的用例是使用.map函数将它与不同的数据一起使用到同一个函数(分配工作)。但是,它也可以用于不同的功能,例如, .apply_async构造就像我在这里做的那样。

但是,这不适用于解释器,但必须存储为.py文件并使用python filename.py运行。

另一答案

在了解了您的用例后,我建议使用multiprocessing.Pool。与@JohanL解决方案类似。

from multiprocessing import Pool

def func1(x):
    return x*x

def func2(y):
    return y*y

def func3(z):
    return z*z

p = Pool(3)
print(p.apply(func1, (2, )))
print(p.apply(func2, (3, )))
print(p.apply(func3, (4, )))

以上是关于Python多处理 - 从3个不同的函数返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从多处理池函数返回值

处理来自不同函数的多个返回数据集 python pandas

分析多继承下的动态多态。

Python多处理:如何创建x个进程并返回返回值

如何从 python 中的多处理中获取函数输出?

Python - 从函数返回多个值到不同的数组