Python 3.x Python多处理::在满足退出条件时生成子项并杀死所有子项

Python 3.x Python多处理::在满足退出条件时生成子项并杀死所有子项,python-3.x,python-multiprocessing,Python 3.x,Python Multiprocessing,我有一个函数,可以在图像文件列表中顺序搜索特定功能,并在找到匹配项后立即终止。这个函数运行几乎需要一秒钟的时间,所以我希望使用多处理,看看是否可以加快速度 def match(a, b, feature) -> boolean: # time.sleep([0 - 10]) # simulates a long time-consuming function # return isMatch # could be True or False depending on w

我有一个函数,可以在图像文件列表中顺序搜索特定功能,并在找到匹配项后立即终止。这个函数运行几乎需要一秒钟的时间,所以我希望使用多处理,看看是否可以加快速度

def match(a, b, feature) -> boolean:
  # time.sleep([0 - 10]) # simulates a long time-consuming function
  # return isMatch       # could be True or False depending on whether feature was found

p = Pool(processes=4)
list = p.map(match, [
  ['imgA', 'img1', feature],
  ['imgA', 'img2', feature],
  ['imgA', 'img3', feature],
  ['imgA', 'img4', feature],
  ['imgA', 'img5', feature],
  ...
  ...
  ['imgA', 'img100', feature],
])
found = next(x for x in list if x == True, False)
这个很好用。顺便说一句,我实际上并没有硬编码参数数组。这只是为了举例说明。然而,关于这种方法,我有几个问题:

  • 现在,在所有100个进程都完成执行之前,控制不会返回给我,即使很早就找到了匹配项。是否有一种方法可以从其中一个子进程发出成功的信号,以便父进程可以终止所有派生的进程并删除队列中任何挂起的进程

  • 如果这是可能的,我想确保如果父进程本身是派生的,那么成功的子进程也不会杀死父进程的兄弟进程的子进程。在本例中,我将
    a
    feature
    保持不变。我想扩展此解决方案,以便将
    a
    b
    作为列表。在这种情况下,对于每个
    a
    ,我都会生成一个子进程来针对所有可能的
    b
    s处理单个
    a
    ,这反过来会生成将针对单个
    b
    处理单个
    a
    的后代。每次我在
    a
    b
    之间找到匹配项时,我都希望终止正在处理单个
    a
    的子进程的所有子进程,该子进程针对所有可能的
    b
    进行处理

  • 如果有人能给我指引正确的方向,甚至是一个图书馆能帮我完成这项工作,我将非常感激

    非常感谢,
    阿西姆

    别客气!我想我搜索得不够好!=/这个问题是对Nevermind的重复!我想我搜索得不够好!=/这个问题是重复的