最近,我开始研究多处理模块,发现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函数是如何工作的,但据我所知,它将为您平均地划分一个可迭代的部分,然后将它们分散到池中,并且工作人员将继续工作,直到所有进程返回或完成为止。是否有一种方法可以在一个进程返回一个值后立即终止一个池?我看过文献资料 on multiprocess.pool,但注意到了
池中的工作进程通常在池的工作队列的整个持续时间内运行。
提前感谢!
发布于 2018-11-03 19:53:58
一种天真的方法是有一个全局标志,当一个线程找到一个答案时,它可以设置这个标志。在每个其他线程中,您可以定期检查标志,如果设置了该标志,则让线程终止。
https://stackoverflow.com/questions/53134656
复制相似问题