import time from multiprocessing.pool import ThreadPool, Pool def job(): return 1 def mapjob(i): return 1 class Callback: def __init__(self): self.results = [] def __call__(self, value): print('value %s' % value) self.results.append(value) raise ValueError('callback raises') for PoolKlass in (ThreadPool, Pool): pool = PoolKlass(1) cb = Callback() for _ in range(5): pool.apply_async(job, callback=cb) pool.close() time.sleep(.5) pool.join() assert len(cb.results) == 5, '%s: apply_async=%d' % (PoolKlass, len(cb.results)) print('Pool %s joined' % (PoolKlass, )) for PoolKlass in (ThreadPool, Pool): cb = Callback() pool = PoolKlass(1) pool.map_async(mapjob, range(5), callback=cb) pool.close() time.sleep(.5) pool.join() assert len(cb.results) == 1, '%s: map_async=%d' % (PoolKlass, len(cb.results)) assert len(cb.results[0]) == 5, '%s: map_async=%d' % (PoolKlass, len(cb.results)) print('Pool %s joined' % (PoolKlass, ))