@@ -774,11 +774,18 @@ def get(self, timeout=None):
774774 raise self ._value
775775
776776 def _set (self , i , obj ):
777- self ._success , self ._value = obj
778- if self ._callback and self ._success :
779- self ._callback (self ._value )
780- if self ._error_callback and not self ._success :
781- self ._error_callback (self ._value )
777+ success , value = obj
778+ try :
779+ if self ._callback and success :
780+ self ._callback (value )
781+ if self ._error_callback and not success :
782+ self ._error_callback (value )
783+ except BaseException as e :
784+ self ._value = e
785+ self ._success = False
786+ else :
787+ self ._value = value
788+ self ._success = success
782789 self ._event .set ()
783790 del self ._cache [self ._job ]
784791 self ._pool = None
@@ -812,8 +819,12 @@ def _set(self, i, success_result):
812819 if success and self ._success :
813820 self ._value [i * self ._chunksize :(i + 1 )* self ._chunksize ] = result
814821 if self ._number_left == 0 :
815- if self ._callback :
816- self ._callback (self ._value )
822+ try :
823+ if self ._callback :
824+ self ._callback (self ._value )
825+ except BaseException as e :
826+ self ._value = e
827+ self ._success = False
817828 del self ._cache [self ._job ]
818829 self ._event .set ()
819830 self ._pool = None
@@ -824,8 +835,12 @@ def _set(self, i, success_result):
824835 self ._value = result
825836 if self ._number_left == 0 :
826837 # only consider the result ready once all jobs are done
827- if self ._error_callback :
828- self ._error_callback (self ._value )
838+ try :
839+ if self ._error_callback :
840+ self ._error_callback (self ._value )
841+ except BaseException as e :
842+ self ._value = e
843+ self ._success = False
829844 del self ._cache [self ._job ]
830845 self ._event .set ()
831846 self ._pool = None
0 commit comments