GH-83658: make multiprocessing.Pool raise an exception if maxtasksperchild is not None or a positive int (GH-93364) (GH-93923)

This commit is contained in:
Miss Islington (bot) 2022-06-17 15:31:42 -07:00 committed by GitHub
parent 05d83a706c
commit 2b7fc1bfe6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 0 deletions

View file

@ -203,6 +203,9 @@ def __init__(self, processes=None, initializer=None, initargs=(),
processes = os.cpu_count() or 1 processes = os.cpu_count() or 1
if processes < 1: if processes < 1:
raise ValueError("Number of processes must be at least 1") raise ValueError("Number of processes must be at least 1")
if maxtasksperchild is not None:
if not isinstance(maxtasksperchild, int) or maxtasksperchild <= 0:
raise ValueError("maxtasksperchild must be a positive int or None")
if initializer is not None and not callable(initializer): if initializer is not None and not callable(initializer):
raise TypeError('initializer must be a callable') raise TypeError('initializer must be a callable')

View file

@ -2861,6 +2861,11 @@ def test_pool_worker_lifetime_early_close(self):
for (j, res) in enumerate(results): for (j, res) in enumerate(results):
self.assertEqual(res.get(), sqr(j)) self.assertEqual(res.get(), sqr(j))
def test_pool_maxtasksperchild_invalid(self):
for value in [0, -1, 0.5, "12"]:
with self.assertRaises(ValueError):
multiprocessing.Pool(3, maxtasksperchild=value)
def test_worker_finalization_via_atexit_handler_of_multiprocessing(self): def test_worker_finalization_via_atexit_handler_of_multiprocessing(self):
# tests cases against bpo-38744 and bpo-39360 # tests cases against bpo-38744 and bpo-39360
cmd = '''if 1: cmd = '''if 1:

View file

@ -0,0 +1 @@
Make :class:`multiprocessing.Pool` raise an exception if ``maxtasksperchild`` is not ``None`` or a positive int.