]> granicus.if.org Git - python/commitdiff
#16307: Fix multiprocessing.Pool.map_async not calling its callbacks
authorHynek Schlawack <hs@ox.cx>
Sat, 27 Oct 2012 10:53:02 +0000 (12:53 +0200)
committerHynek Schlawack <hs@ox.cx>
Sat, 27 Oct 2012 10:53:02 +0000 (12:53 +0200)
Patch by Janne Karila.

Lib/multiprocessing/pool.py
Lib/test/test_multiprocessing.py
Misc/ACKS
Misc/NEWS

index ec57939c45f2cc445972b63420af273ab36b73ab..7f73b441c2e249a7d148ff024975fe4c43bd1d42 100644 (file)
@@ -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):
index e313dd60622bfa08744e2dc023c1376f131ef18c..b2a964cec651554321808c6b3c49eb3ac8b23e9c 100644 (file)
@@ -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)
index 3ee38640a2423d2fc12ccf657f4c889621c8d57b..ac44ae81263965ecac3ebf46b6e55c6ac629af32 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -594,6 +594,7 @@ Jan Kaliszewski
 Peter van Kampen
 Rafe Kaplan
 Jacob Kaplan-Moss
+Janne Karila
 Per Ã˜yvind Karlsen
 Lou Kates
 Hiroaki Kawai
index e0a54cbe016becd9277c6b6c21d6df5cd8c06458..9766633f7cdc6c4395e8702c8899cc8078899a0f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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