我最近开始在多处理模块中四处寻找,发现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,但已注意到
池中的工作流程通常在池的工作队列的整个期间内都处于活动状态。
谢谢!
答案 0 :(得分:0)
一个幼稚的方法是拥有一个线程可以在找到答案时设置的全局标志。在其他每个线程中,您可以定期检查该标志,并在设置了该线程的情况下终止该线程。