summaryrefslogtreecommitdiff
path: root/src/apscheduler/workers/sync.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/apscheduler/workers/sync.py')
-rw-r--r--src/apscheduler/workers/sync.py20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/apscheduler/workers/sync.py b/src/apscheduler/workers/sync.py
index 26e4df6..41279d9 100644
--- a/src/apscheduler/workers/sync.py
+++ b/src/apscheduler/workers/sync.py
@@ -167,6 +167,7 @@ class Worker:
if start_future:
start_future.set_result(None)
+ exception: BaseException | None = None
try:
while self._state is RunState.started:
available_slots = self.max_concurrent_jobs - len(self._running_jobs)
@@ -184,17 +185,20 @@ class Worker:
self._wakeup_event.wait()
self._wakeup_event = threading.Event()
except BaseException as exc:
+ exception = exc
+ raise
+ finally:
self._state = RunState.stopped
- if isinstance(exc, Exception):
+ if not exception:
+ self.logger.info("Worker stopped")
+ elif isinstance(exception, Exception):
self.logger.exception("Worker crashed")
- else:
- self.logger.info(f"Worker stopped due to {exc.__class__.__name__}")
+ elif exception:
+ self.logger.info(
+ f"Worker stopped due to {exception.__class__.__name__}"
+ )
- self.event_broker.publish_local(WorkerStopped(exception=exc))
- else:
- self._state = RunState.stopped
- self.logger.info("Worker stopped")
- self.event_broker.publish_local(WorkerStopped())
+ self.event_broker.publish_local(WorkerStopped(exception=exception))
def _run_job(self, job: Job, func: Callable) -> None:
try: