来自3个不同函数的Python多处理返回值

2024-06-28 11:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要并行执行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()

但第一、第二和第三个似乎是“非类型”对象。

我的密码怎么了?

谢谢


Tags: 函数代码targetreturndefprocessstartfirst
2条回答

有几种不同的方法可以解决这个问题。最简单的方法是使用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 solution。

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, )))

相关问题 更多 >