Commit 254af264 authored by Hynek Schlawack's avatar Hynek Schlawack

#16307: Fix multiprocessing.Pool.map_async not calling its callbacks

Patch by Janne Karila.
parent cc2f0421
......@@ -297,7 +297,8 @@ class Pool(object):
'''
Asynchronous version of `map()` method.
'''
return self._map_async(func, iterable, mapstar, chunksize)
return self._map_async(func, iterable, mapstar, chunksize, callback,
error_callback)
def _map_async(self, func, iterable, mapper, chunksize=None, callback=None,
error_callback=None):
......
......@@ -1642,6 +1642,23 @@ class _TestPool(BaseTestCase):
self.assertEqual(self.pool.starmap_async(mul, tuples).get(),
list(itertools.starmap(mul, tuples)))
def test_map_async(self):
self.assertEqual(self.pool.map_async(sqr, list(range(10))).get(),
list(map(sqr, list(range(10)))))
def test_map_async_callbacks(self):
call_args = self.manager.list() if self.TYPE == 'manager' else []
self.pool.map_async(int, ['1'],
callback=call_args.append,
error_callback=call_args.append).wait()
self.assertEqual(1, len(call_args))
self.assertEqual([1], call_args[0])
self.pool.map_async(int, ['a'],
callback=call_args.append,
error_callback=call_args.append).wait()
self.assertEqual(2, len(call_args))
self.assertIsInstance(call_args[1], ValueError)
def test_map_chunksize(self):
try:
self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1)
......
......@@ -594,6 +594,7 @@ Jan Kaliszewski
Peter van Kampen
Rafe Kaplan
Jacob Kaplan-Moss
Janne Karila
Per Øyvind Karlsen
Lou Kates
Hiroaki Kawai
......
......@@ -49,6 +49,9 @@ Core and Builtins
Library
-------
- Issue #16307: Fix multiprocessing.Pool.map_async not calling its callbacks.
Patch by Janne Karila.
- Issue #16250: Fix URLError invocation with proper args.
- Issue #16116: Fix include and library paths to be correct when building C
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment