diff options
-rw-r--r-- | Lib/multiprocessing/pool.py | 2 | ||||
-rw-r--r-- | Lib/test/test_multiprocessing.py | 6 | ||||
-rw-r--r-- | Misc/ACKS | 1 | ||||
-rw-r--r-- | Misc/NEWS | 2 |
4 files changed, 11 insertions, 0 deletions
diff --git a/Lib/multiprocessing/pool.py b/Lib/multiprocessing/pool.py index bc7e8f1..b91b77d 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 1e4a98e..29c7ff9 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) @@ -199,6 +199,7 @@ Walter Dörwald Hans Eckardt Grant Edwards John Ehresman +Eric Eisner Andrew Eland Lance Ellinghaus David Ely @@ -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 |