mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
#16307: Fix multiprocessing.Pool.map_async not calling its callbacks
Patch by Janne Karila.
This commit is contained in:
parent
cc2f0421c7
commit
254af2644a
4 changed files with 23 additions and 1 deletions
|
@ -297,7 +297,8 @@ class Pool(object):
|
||||||
'''
|
'''
|
||||||
Asynchronous version of `map()` method.
|
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,
|
def _map_async(self, func, iterable, mapper, chunksize=None, callback=None,
|
||||||
error_callback=None):
|
error_callback=None):
|
||||||
|
|
|
@ -1642,6 +1642,23 @@ class _TestPool(BaseTestCase):
|
||||||
self.assertEqual(self.pool.starmap_async(mul, tuples).get(),
|
self.assertEqual(self.pool.starmap_async(mul, tuples).get(),
|
||||||
list(itertools.starmap(mul, tuples)))
|
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):
|
def test_map_chunksize(self):
|
||||||
try:
|
try:
|
||||||
self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1)
|
self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1)
|
||||||
|
|
|
@ -594,6 +594,7 @@ Jan Kaliszewski
|
||||||
Peter van Kampen
|
Peter van Kampen
|
||||||
Rafe Kaplan
|
Rafe Kaplan
|
||||||
Jacob Kaplan-Moss
|
Jacob Kaplan-Moss
|
||||||
|
Janne Karila
|
||||||
Per Øyvind Karlsen
|
Per Øyvind Karlsen
|
||||||
Lou Kates
|
Lou Kates
|
||||||
Hiroaki Kawai
|
Hiroaki Kawai
|
||||||
|
|
|
@ -49,6 +49,9 @@ Core and Builtins
|
||||||
Library
|
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 #16250: Fix URLError invocation with proper args.
|
||||||
|
|
||||||
- Issue #16116: Fix include and library paths to be correct when building C
|
- Issue #16116: Fix include and library paths to be correct when building C
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue