diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2018-05-24 01:34:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-24 01:34:43 (GMT) |
commit | fa286edbde9ed660d99628aea14ee3b824c2afe6 (patch) | |
tree | 92ef4a1e41e7aa2849dfae1c2e29fe200e9e14e8 /Lib/socketserver.py | |
parent | fa24c1c5afa9ba2453d88db5ed6b9d2cc3b58384 (diff) | |
download | cpython-fa286edbde9ed660d99628aea14ee3b824c2afe6.zip cpython-fa286edbde9ed660d99628aea14ee3b824c2afe6.tar.gz cpython-fa286edbde9ed660d99628aea14ee3b824c2afe6.tar.bz2 |
bpo-33540: Add block_on_close attr to socketserver (GH-6911)
Add a new block_on_close class attribute to ForkingMixIn and
ThreadingMixIn classes of socketserver to opt-in for pre-3.7 behaviour.
(cherry picked from commit 453bd0bc65b7ea6a18c43da69143ab10d54c0a35)
Co-authored-by: Victor Stinner <vstinner@redhat.com>
Diffstat (limited to 'Lib/socketserver.py')
-rw-r--r-- | Lib/socketserver.py | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/Lib/socketserver.py b/Lib/socketserver.py index 1ae7bef..71bb9a4 100644 --- a/Lib/socketserver.py +++ b/Lib/socketserver.py @@ -543,6 +543,8 @@ if hasattr(os, "fork"): timeout = 300 active_children = None max_children = 40 + # If true, server_close() waits until all child processes complete. + block_on_close = True def collect_children(self, *, blocking=False): """Internal routine to wait for children that have exited.""" @@ -620,7 +622,7 @@ if hasattr(os, "fork"): def server_close(self): super().server_close() - self.collect_children(blocking=True) + self.collect_children(blocking=self.block_on_close) class ThreadingMixIn: @@ -629,6 +631,8 @@ class ThreadingMixIn: # Decides how threads will act upon termination of the # main process daemon_threads = False + # If true, server_close() waits until all non-daemonic threads terminate. + block_on_close = True # For non-daemonic threads, list of threading.Threading objects # used by server_close() to wait for all threads completion. _threads = None @@ -659,11 +663,12 @@ class ThreadingMixIn: def server_close(self): super().server_close() - threads = self._threads - self._threads = None - if threads: - for thread in threads: - thread.join() + if self.block_on_close: + threads = self._threads + self._threads = None + if threads: + for thread in threads: + thread.join() if hasattr(os, "fork"): |