diff options
author | Victor Stinner <vstinner@python.org> | 2022-04-19 16:27:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-19 16:27:00 +0200 |
commit | 061a8bf77c80036bed3ef4973fe0c99705c83fc6 (patch) | |
tree | 19c2418fd5877d4b3cc211e7f40eff5ad5397a08 /Lib/test/_test_multiprocessing.py | |
parent | 74070085da5322ac83c954f101f2caa150655be2 (diff) | |
download | cpython-git-061a8bf77c80036bed3ef4973fe0c99705c83fc6.tar.gz |
gh-91231: Add shutdown_timeout to multiprocessing BaseManager (#32112)
Add an optional keyword 'shutdown_timeout' parameter to the
multiprocessing.BaseManager constructor. Kill the process if
terminate() takes longer than the timeout.
Multiprocessing tests pass test.support.SHORT_TIMEOUT
to BaseManager.shutdown_timeout.
Diffstat (limited to 'Lib/test/_test_multiprocessing.py')
-rw-r--r-- | Lib/test/_test_multiprocessing.py | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index bb73d9e7cc..427fc0c47a 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -119,6 +119,9 @@ if CHECK_TIMINGS: else: TIMEOUT1, TIMEOUT2, TIMEOUT3 = 0.1, 0.1, 0.1 +# BaseManager.shutdown_timeout +SHUTDOWN_TIMEOUT = support.SHORT_TIMEOUT + HAVE_GETVALUE = not getattr(_multiprocessing, 'HAVE_BROKEN_SEM_GETVALUE', False) @@ -2897,7 +2900,7 @@ class _TestMyManager(BaseTestCase): ALLOWED_TYPES = ('manager',) def test_mymanager(self): - manager = MyManager() + manager = MyManager(shutdown_timeout=SHUTDOWN_TIMEOUT) manager.start() self.common(manager) manager.shutdown() @@ -2908,7 +2911,8 @@ class _TestMyManager(BaseTestCase): self.assertIn(manager._process.exitcode, (0, -signal.SIGTERM)) def test_mymanager_context(self): - with MyManager() as manager: + manager = MyManager(shutdown_timeout=SHUTDOWN_TIMEOUT) + with manager: self.common(manager) # bpo-30356: BaseManager._finalize_manager() sends SIGTERM # to the manager process if it takes longer than 1 second to stop, @@ -2916,7 +2920,7 @@ class _TestMyManager(BaseTestCase): self.assertIn(manager._process.exitcode, (0, -signal.SIGTERM)) def test_mymanager_context_prestarted(self): - manager = MyManager() + manager = MyManager(shutdown_timeout=SHUTDOWN_TIMEOUT) manager.start() with manager: self.common(manager) @@ -2978,8 +2982,8 @@ class _TestRemoteManager(BaseTestCase): @classmethod def _putter(cls, address, authkey): manager = QueueManager2( - address=address, authkey=authkey, serializer=SERIALIZER - ) + address=address, authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) manager.connect() queue = manager.get_queue() # Note that xmlrpclib will deserialize object as a list not a tuple @@ -2989,8 +2993,8 @@ class _TestRemoteManager(BaseTestCase): authkey = os.urandom(32) manager = QueueManager( - address=(socket_helper.HOST, 0), authkey=authkey, serializer=SERIALIZER - ) + address=(socket_helper.HOST, 0), authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) manager.start() self.addCleanup(manager.shutdown) @@ -2999,8 +3003,8 @@ class _TestRemoteManager(BaseTestCase): p.start() manager2 = QueueManager2( - address=manager.address, authkey=authkey, serializer=SERIALIZER - ) + address=manager.address, authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) manager2.connect() queue = manager2.get_queue() @@ -3020,7 +3024,8 @@ class _TestManagerRestart(BaseTestCase): @classmethod def _putter(cls, address, authkey): manager = QueueManager( - address=address, authkey=authkey, serializer=SERIALIZER) + address=address, authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) manager.connect() queue = manager.get_queue() queue.put('hello world') @@ -3028,7 +3033,8 @@ class _TestManagerRestart(BaseTestCase): def test_rapid_restart(self): authkey = os.urandom(32) manager = QueueManager( - address=(socket_helper.HOST, 0), authkey=authkey, serializer=SERIALIZER) + address=(socket_helper.HOST, 0), authkey=authkey, + serializer=SERIALIZER, shutdown_timeout=SHUTDOWN_TIMEOUT) try: srvr = manager.get_server() addr = srvr.address @@ -3048,7 +3054,8 @@ class _TestManagerRestart(BaseTestCase): manager.shutdown() manager = QueueManager( - address=addr, authkey=authkey, serializer=SERIALIZER) + address=addr, authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) try: manager.start() self.addCleanup(manager.shutdown) @@ -3059,7 +3066,8 @@ class _TestManagerRestart(BaseTestCase): # (sporadic failure on buildbots) time.sleep(1.0) manager = QueueManager( - address=addr, authkey=authkey, serializer=SERIALIZER) + address=addr, authkey=authkey, serializer=SERIALIZER, + shutdown_timeout=SHUTDOWN_TIMEOUT) if hasattr(manager, "shutdown"): self.addCleanup(manager.shutdown) |