Index: Lib/multiprocessing/pool.py =================================================================== --- Lib/multiprocessing/pool.py (revision 82852) +++ Lib/multiprocessing/pool.py (working copy) @@ -283,8 +283,9 @@ break try: put(task) - except IOError: + except Exception, e: debug('could not put task on queue') + outqueue.put((task[0], task[1], (False, e))) break else: if set_length: Index: Lib/test/test_multiprocessing.py =================================================================== --- Lib/test/test_multiprocessing.py (revision 82852) +++ Lib/test/test_multiprocessing.py (working copy) @@ -10,6 +10,7 @@ import sys import os import gc +import cPickle import signal import array import socket @@ -1070,6 +1071,13 @@ join = TimingWrapper(self.pool.join) join() self.assertTrue(join.elapsed < 0.2) + + def test_unpickleable(self): + p = multiprocessing.Pool(3) + f = lambda x: x + self.assertRaises(cPickle.PicklingError, p.apply, f, [1]) + p.close() + p.join() class _TestPoolWorkerLifetime(BaseTestCase):