summaryrefslogtreecommitdiff
path: root/Lib/test/_test_multiprocessing.py
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-04-19 16:27:00 +0200
committerGitHub <noreply@github.com>2022-04-19 16:27:00 +0200
commit061a8bf77c80036bed3ef4973fe0c99705c83fc6 (patch)
tree19c2418fd5877d4b3cc211e7f40eff5ad5397a08 /Lib/test/_test_multiprocessing.py
parent74070085da5322ac83c954f101f2caa150655be2 (diff)
downloadcpython-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.py34
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)