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.Pool
和apply_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个不同的函数返回值[重复]的主要内容,如果未能解决你的问题,请参考以下文章