如何尽早终止python多进程池

时间:2018-11-03 19:15:00

标签: python python-3.x multiprocessing pool

我最近开始在多处理模块中四处寻找,发现pool.map函数对于快速解析大型数组非常有用。有办法提前终止池吗?可以说我有一个庞大的列表,我想在列表中找到一个数字,检查它是否适合x使用,然后返回true(如果可以)并尽早终止池的其余部分,我该怎么做呢?为了进行概念验证,我尝试查找从3到无穷大的质数(可能是效率最低的方法)。这是一个示例:

import multiprocessing
from functools import partial

finders=multiprocessing.pool(multiprocessing.cpu_count()-1)

def is_devis(x, number):
    if number%x==0:
        return True

if __name__=="__main__":
    Primes=[3, 5, 7, 11, 13, 17, ...]
    x=3
    while True:
        x=x+2
        func=partial(is_devis, x)
        results=finders.map(func, Primes)
        if not (True in results):
            Primes.append(x)

我可能不会完全掌握多进程池或pool.map函数的工作方式,但是据我了解,它将为您平均分配一个 iterable ,然后将其分散到池和工作人员将继续执行,直到所有过程返回或完成。有一种方法可以在一个进程返回值后立即终止池?我在multiprocess.pool上查看了the documentation,但已注意到

  

池中的工作流程通常在池的工作队列的整个期间内都处于活动状态。

谢谢!

1 个答案:

答案 0 :(得分:0)

一个幼稚的方法是拥有一个线程可以在找到答案时设置的全局标志。在其他每个线程中,您可以定期检查该标志,并在设置了该线程的情况下终止该线程。