Python Multiprocess Pool. How to exit the script when one of the worker process determines no more work needs to be done?(Python 多进程池.当其中一个工作进程确定不再需要完成工作时,如何退出脚本?)
问题描述
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()
所以我有一个工作进程池来做一些工作.它只需要找到一种解决方案.因此,当其中一个工作进程找到解决方案时,我想停止一切.
So I have a pool of worker process that does some work. It just needs to find one solution. Therefore, when one of the worker processes finds the solution, I want to stop everything.
我想到的一种方法就是调用 sys.exit().但是,这似乎无法正常工作,因为其他进程正在运行.
One way I thought of was just calling sys.exit(). However, that doesn't seem like it's working properly since other processes are running.
另一种方法是检查每个进程调用的返回值(part_crack_helper 函数的返回值)并在该进程上调用终止.但是,我不知道在使用该地图功能时该怎么做.
One other way was to check for the return value of each process calls (the return value of part_crack_helper function) and call terminate on that process. However, I don't know how to do that when using that map function.
我应该如何做到这一点?
How should I achieve this?
推荐答案
您可以使用来自 Pool.apply_async 的回调.
You can use callbacks from Pool.apply_async.
这样的事情应该可以为您完成这项工作.
Something like this should do the job for you.
from multiprocessing import Pool
def part_crack_helper(args):
    solution = do_job(args)
    if solution:
        return True
    else:
        return False
class 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()
                        这篇关于Python 多进程池.当其中一个工作进程确定不再需要完成工作时,如何退出脚本?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Python 多进程池.当其中一个工作进程确定不再需要完成工作时,如何退出脚本?
				
        
 
            
        基础教程推荐
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 - 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
 - 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
 - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
 - 求两个直方图的卷积 2022-01-01
 - PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
 - 包装空间模型 2022-01-01
 - 修改列表中的数据帧不起作用 2022-01-01
 - PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
 - 在Python中从Azure BLOB存储中读取文件 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				