@@ -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  self ._success :
780+                 self ._callback (value )
781+             if  self ._error_callback  and  not  self ._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