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