diff --git a/Lib/multiprocessing/managers.py b/Lib/multiprocessing/managers.py index 80c3ddb915..fd187ba663 100644 --- a/Lib/multiprocessing/managers.py +++ b/Lib/multiprocessing/managers.py @@ -156,6 +156,7 @@ class Server(object): self.id_to_refcount = {} self.id_to_local_proxy_obj = {} self.mutex = threading.Lock() + self.shutdown_thread = None def serve_forever(self): ''' @@ -177,6 +178,8 @@ class Server(object): util.debug('resetting stdout, stderr') sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ + if self.shutdown_thread: + self.shutdown_thread.join() sys.exit(0) def accepter(self): @@ -210,16 +213,17 @@ class Server(object): msg = ('#TRACEBACK', format_exc()) else: msg = ('#RETURN', result) - try: - c.send(msg) - except Exception as e: + if not self.stop_event.is_set(): try: - c.send(('#TRACEBACK', format_exc())) - except Exception: - pass - util.info('Failure to send message: %r', msg) - util.info(' ... request was %r', request) - util.info(' ... exception was %r', e) + c.send(msg) + except Exception as e: + try: + c.send(('#TRACEBACK', format_exc())) + except Exception: + pass + util.info('Failure to send message: %r', msg) + util.info(' ... request was %r', request) + util.info(' ... exception was %r', e) c.close() @@ -357,6 +361,7 @@ class Server(object): traceback.print_exc() finally: self.stop_event.set() + self.shutdown_thread = threading.current_thread() def create(*args, **kwds): '''