我最近开始研究multiprocessing模块,并发现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函数的工作原理,但据我所知,它会平均分配一个可迭代对象并将其分配给池中的所有工作进程,直到所有进程返回或完成。有没有一种方式可以在一个进程返回值时立即终止池?我已经查看了关于multiprocess.pool的文档,但注意到以下内容:
池内的工作进程通常会在池的工作队列完成后继续存在。
提前感谢!