from multiprocessing.pool import Pool #from multiprocessing.pool import ThreadPool as Pool def double(x): return 2 * x def get_numbers(): raise Exception("oops") yield 1 yield 2 def get_numbers_differently(): yield 1 raise Exception("oops") yield 2 if __name__ == '__main__': # Used to result in no exception, disappointingly try: for result in Pool(processes=2).imap(double, get_numbers()): print("RESULT:", result) print("1st try: imap did not trigger exception") except Exception as e: print("1st try: imap triggered exception: %r" % (e,)) # Repeated use of imap also used to have problems try: for result in Pool(processes=2).imap(double, get_numbers()): print("RESULT:", result) print("2nd try: imap did not trigger exception") except Exception as e: print("2nd try: imap triggered exception: %r" % (e,)) # Results in exception try: print("RESULT:", Pool(processes=2).map(double, get_numbers())) except Exception as e: print("map triggered exception: %r" % (e,)) # Results in exception try: for result in Pool(processes=2).imap(double, get_numbers_differently()): print("RESULT:", result) except Exception as e: print("imap triggered exception: %r" % (e,)) #raise e # Also results in exception try: print("RESULT:", Pool(processes=2).map(double, get_numbers_differently())) except Exception as e: print("map triggered exception: %r" % (e,)) # Used to result in no exception, disappointingly try: for result in Pool(processes=2).imap_unordered(double, get_numbers()): print("RESULT:", result) print("1st try: imap_unordered did not trigger exception") except Exception as e: print("1st try: imap_unordered triggered exception: %r" % (e,)) # Repeated use of imap_unordered also used to have problems try: for result in Pool(processes=2).imap_unordered(double, get_numbers()): print("RESULT:", result) print("2nd try: imap_unordered did not trigger exception") except Exception as e: print("2nd try: imap_unordered triggered exception: %r" % (e,)) # Results in exception try: for result in Pool(processes=2).imap_unordered(double, get_numbers_differently()): print("RESULT:", result) except Exception as e: print("imap_unordered triggered exception: %r" % (e,)) #raise e