Skip to content

Commit 8a7c14e

Browse files
committed
route callback failures to AsyncResult
1 parent c6b1a07 commit 8a7c14e

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

Lib/multiprocessing/pool.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)