微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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()

解决方法

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函数时该怎么做。

我应该如何实现?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。