@@ -483,11 +483,13 @@ def __init__(
483483 self .__thread : Optional [threading .Thread ] = None
484484 self .__cancel = threading .Event ()
485485
486- def run (self , arg : _T ) -> queue .Queue [Union [ _R , CancelledException ]]:
486+ def run (self , arg : _T ) -> queue .Queue [Tuple [ Optional [ _R ], Optional [ Exception ] ]]:
487487 """Cancel any current thread of execution; block until it is cancelled; and re-launch the worker."""
488488 self .cancel ()
489489
490- result_queue : queue .Queue [Union [_R , CancelledException ]] = queue .Queue (1 )
490+ result_queue : queue .Queue [
491+ Tuple [Optional [_R ], Optional [Exception ]]
492+ ] = queue .Queue (1 )
491493
492494 def inner () -> None :
493495 try :
@@ -497,9 +499,9 @@ def inner() -> None:
497499 if self .__cancel .is_set ():
498500 raise CancelledException ()
499501
500- result_queue .put (result )
501- except CancelledException as cancelled :
502- result_queue .put (cancelled )
502+ result_queue .put (( result , None ) )
503+ except Exception as exception :
504+ result_queue .put (( None , exception ) )
503505
504506 thread = threading .Thread (name = self .name , target = inner , daemon = True )
505507 with self ._lock :
@@ -509,11 +511,11 @@ def inner() -> None:
509511 return result_queue
510512
511513 def run_and_wait (self , arg : _T ) -> _R :
512- result = self .run (arg ).get ()
513- if isinstance ( result , CancelledException ) :
514- raise result
514+ result , exception = self .run (arg ).get ()
515+ if exception :
516+ raise exception
515517
516- return result
518+ return cast ( _R , result )
517519
518520 def cancel (self ) -> None :
519521 """Instruct the worker to raise WorkerCanceled and abort execution."""
0 commit comments