如何在任何一个进程出现异常的情况下退出所有连接的进程-Python

如何在任何一个进程出现异常的情况下退出所有连接的进程-Python,python,python-multiprocessing,Python,Python Multiprocessing,我有一个python进程池,如果在任何一个进程中发生异常,我希望退出该池的执行 我已加入池中的所有进程,因此加入将等待每个进程完成。 如果在目标函数中引发sys.exit(1),系统将无限等待,因为连接仍在等待进程完成 在代码中使用join时如何退出执行 from multiprocessing import Pool import time import sys def printer(ip): try: for _ in xrange(5):

我有一个python进程池,如果在任何一个进程中发生异常,我希望退出该池的执行

我已加入池中的所有进程,因此加入将等待每个进程完成。 如果在目标函数中引发sys.exit(1),系统将无限等待,因为连接仍在等待进程完成

在代码中使用join时如何退出执行

from multiprocessing import Pool
import time
import sys

def printer(ip):
    try:
        for _ in xrange(5):
            print ip+str(_)
            time.sleep(1.0)
    except Exception as e:
        print e
        sys.exit(2)

def test():
    pool = Pool(processes=2)
    for i in ["hello",5]:
        result = pool.apply_async(printer,(i,))
    pool.close()    
    pool.join()
    print "good bye"

test()

只需将操作的状态返回到父进程,并使用回调对失败作出反应

import time
from multiprocessing import Pool


def printer(ip):
    try:
        for _ in xrange(5):
            print ip+str(_)
            time.sleep(1.0)
        return True
    except Exception as e:
        print e
        return False


class Worker():
    def __init__(self):
        self.pool = Pool(processes=2)

    def callback(self, result):
        if not result:
            print "Error raised in child process. Terminating.."
            self.pool.terminate()

    def do_job(self):
        for i in ["hello", 5]:
            self.pool.apply_async(printer, (i,), callback=self.callback)
        self.pool.close()
        self.pool.join()
        print "good bye"


def test():
    w = Worker()
    w.do_job()