From 7530e47948446f03a79ad7dec4cc129ad3388418 Mon Sep 17 00:00:00 2001 From: Jesse Noller Date: Thu, 16 Jul 2009 14:23:04 +0000 Subject: [PATCH] Issue 6433: multiprocessing.pool.map hangs on empty list --- Lib/multiprocessing/pool.py | 2 ++ Lib/test/test_multiprocessing.py | 6 ++++++ Misc/ACKS | 1 + Misc/NEWS | 2 ++ 4 files changed, 11 insertions(+) diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py index bc7e8f1712..b91b77d16d 100644 --- a/Lib/multiprocessing/pool.py +++ b/Lib/multiprocessing/pool.py @@ -207,6 +207,8 @@ class Pool(object): chunksize, extra = divmod(len(iterable), len(self._pool) * 4) if extra: chunksize += 1 + if len(iterable) == 0: + chunksize = 0 task_batches = Pool._get_tasks(func, iterable, chunksize) result = MapResult(self._cache, chunksize, len(iterable), callback) diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py index 1e4a98e4f2..29c7ff961b 100644 --- a/Lib/test/test_multiprocessing.py +++ b/Lib/test/test_multiprocessing.py @@ -990,6 +990,12 @@ class _TestPool(BaseTestCase): self.assertEqual(pmap(sqr, range(100), chunksize=20), map(sqr, range(100))) + def test_map_chunksize(self): + try: + self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1) + except multiprocessing.TimeoutError: + self.fail("pool.map_async with chunksize stalled on null list") + def test_async(self): res = self.pool.apply_async(sqr, (7, TIMEOUT1,)) get = TimingWrapper(res.get) diff --git a/Misc/ACKS b/Misc/ACKS index 4b1f2909e5..41d72c1108 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -199,6 +199,7 @@ Walter Dörwald Hans Eckardt Grant Edwards John Ehresman +Eric Eisner Andrew Eland Lance Ellinghaus David Ely diff --git a/Misc/NEWS b/Misc/NEWS index 51930409e3..3e43df58e5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -352,6 +352,8 @@ Core and Builtins Library ------- +- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list + - Issue #6314: logging: Extra checks on the "level" argument in more places. - Issue #2622: Fixed an ImportError when importing email.messsage from a -- 2.50.1