summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/multiprocessing/pool.py2
-rw-r--r--Lib/test/test_multiprocessing.py6
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS2
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)
diff --git a/Misc/ACKS b/Misc/ACKS
index 4b1f290..41d72c1 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 5193040..3e43df5 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