Consider a sample.py
file containing the following code:
from multiprocessing import Pool def sample_worker(x): print "sample_worker processes item", x return x def get_sample_sequence(): for i in xrange(2,30): if i % 10 == 0: raise Exception('That sequence is corrupted!') yield i if __name__ == "__main__": pool = Pool(24) try: for x in pool.imap_unordered(sample_worker, get_sample_sequence()): print "sample_worker returned value", x except: print "Outer exception caught!" pool.close() pool.join() print "done"
When I completed it, I get the following output:
Exception in thread Thread-2: Traceback (most recent call last): File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner self.run() File "C:\Python27\lib\threading.py", line 763, in run self.__target(*self.__args, **self.__kwargs) File "C:\Python27\lib\multiprocessing\pool.py", line 338, in _handle_tasks for i, task in enumerate(taskseq): File "C:\Python27\lib\multiprocessing\pool.py", line 278, in <genexpr> self._taskqueue.put((((result._job, i, func, (x,), {}) File "C:\Users\renat-nasyrov\Desktop\sample.py", line 10, in get_sample_sequence raise Exception('That sequence is corrupted!') Exception: That sequence is corrupted!
After that, the application freezes. How can I handle a situation without freezes?
Pehat source share