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

标签 python process multiprocessing

<分区>

我需要并行执行 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 运行。

关于Python 多处理 - 从 3 个不同的函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48932757/

相关文章:

java - 获取另一个Java进程的工作目录

Python:我的带有五个进程的 python 程序使用了多少个内核?

multithreading - 在 Kafka 中设计消息键的最佳方法是什么?

python - pip freeze 捕获包名称,就好像它位于 python 索引站 pip 上一样,但事实并非如此。需要完整路径

python - Python 中经过评估/动态生成的函数的源代码

c# - 线程、进程和 Application.Exit()

c# - 如何找出哪个进程启动了我的exe?

python - 多处理 - 读取大输入数据 - 程序挂起

Python/Selenium "hover-and-click"不适用于其类在悬停时发生变化的 WebElement

python - 遍历列表的列表列表和元组列表