Python 当两个并行运行的方法之一返回结果时,如何终止整个程序?
下面是一个简单的例子。 我试图在只包含正整数的递增数组中找到一个最大元素。我想让两个算法并行运行Python 当两个并行运行的方法之一返回结果时,如何终止整个程序?,python,python-multiprocessing,Python,Python Multiprocessing,下面是一个简单的例子。 我试图在只包含正整数的递增数组中找到一个最大元素。我想让两个算法并行运行find_max_1和find_max_2,然后当一个算法返回结果时,整个程序终止 def find_max_1(数组): #方法1,只返回最后一个元素 返回数组[len(数组)-1] def find_max_2(阵列): #方法2 解决方案=数组[0]; 对于数组中的n: 溶液=最大值(n) 返回溶液 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': #两个算
find_max_1
和find_max_2
,然后当一个算法返回结果时,整个程序终止
def find_max_1(数组):
#方法1,只返回最后一个元素
返回数组[len(数组)-1]
def find_max_2(阵列):
#方法2
解决方案=数组[0];
对于数组中的n:
溶液=最大值(n)
返回溶液
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#两个算法并行运行,当其中一个返回结果时,整个程序停止
通过
我希望我清楚正确地解释了我的问题。我发现可以在多处理
中使用事件
和终止
,所有进程在事件时终止
def find_max_1(数组、事件):
#方法1,只返回最后一个元素
event.set()
返回数组[len(数组)-1]
def find_max_2(阵列、事件):
#方法2
解决方案=数组[0];
对于数组中的n:
溶液=最大值(n)
event.set()
返回溶液
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
#两个算法并行运行,当其中一个返回结果时,整个程序停止
事件=多处理。事件()
数组=[1,2,3,4,5,6,7,8,9…100000007]
p1=多处理。进程(目标=查找最大值,参数=(数组,事件,)
p2=多处理。进程(目标=查找最大值2,参数=(数组,事件,)
作业=[p1,p2]
p1.开始()
p2.start()
尽管如此:
如果event.is_set():
对于工作中的p:
p、 终止()
系统出口(1)
时间。睡眠(2)
但效率不高。如果有更快的实现来解决它?多谢各位 无论你在做什么,你都在制造僵尸进程。在python中,多处理库的工作方式有点混乱。如果要终止进程,请确保已加入该进程。在python多处理指南中,它清楚地指出
加入僵尸进程
在Unix上,当进程完成但尚未加入时,它将变成僵尸。不应该有太多,因为每次启动一个新进程(或调用active_children())时,所有尚未联接的已完成进程都将联接。同时调用已完成进程的process.is_alive将加入该进程。即使如此,显式地加入您启动的所有流程可能也是一种良好的做法
<强>请考虑在使用TealEnter()时使用Couse()关键字。我建议你在SE上的网站上问这个问题。堆栈溢出是为了解决代码问题,而不是优化它:)。您知道python有两个内置的名为
min
和max
?非常感谢大家。上面提到的例子只是对实际问题的简化。