您的位置:首页技术文章
文章详情页

Python多进程池。当工作进程之一确定不再需要执行更多工作时,如何退出脚本?

浏览:4日期:2022-08-07 10:12:51
如何解决Python多进程池。当工作进程之一确定不再需要执行更多工作时,如何退出脚本??

您可以使用中的回调Pool.apply_async。

这样的事情应该可以为您完成工作。

from multiprocessing import Pooldef part_crack_helper(args): solution = do_job(args) if solution:return True else:return Falseclass Worker(): def __init__(self, workers, initializer, initargs):self.pool = Pool(processes=workers, initializer=initializer, initargs=initargs) def callback(self, result):if result: print 'Solution found! Yay!' self.pool.terminate() def do_job(self):for args in product(seed_str, repeat=4): self.pool.apply_async(part_crack_helper, args=args, callback=self.callback)self.pool.close()self.pool.join()print 'good bye'w = Worker(num_proc, init, [total_count])w.do_job()解决方法

mp.set_start_method(’spawn’)total_count = Counter(0)pool = mp.Pool(initializer=init,initargs=(total_count,),processes=num_proc)pool.map(part_crack_helper,product(seed_str,repeat=4))pool.close()pool.join()

因此,我有一组工作人员在做一些工作。它只需要找到一个解决方案。因此,当一个工作进程找到解决方案时,我想停止一切。

我想到的一种方法是只调用sys.exit()。但是,由于其他进程正在运行,因此似乎无法正常工作。

另一种方法是检查每个进程调用的返回值(part_crack_helper函数的返回值),然后在该进程上终止调用。但是,我不知道在使用该map函数时该怎么做。

我应该如何实现?

标签: Python 编程