diff --git a/src/lightning_app/CHANGELOG.md b/src/lightning_app/CHANGELOG.md index 59acf63a1fee0..b7e01e77224cb 100644 --- a/src/lightning_app/CHANGELOG.md +++ b/src/lightning_app/CHANGELOG.md @@ -42,6 +42,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). - Fixed the `enable_spawn` method of the `WorkRunExecutor` ([#15812](https://github.com/Lightning-AI/lightning/pull/15812) +- Fixed Sigterm Handler causing thread lock which caused KeyboardInterrupt to hang ([#15881](https://github.com/Lightning-AI/lightning/pull/15881)) + ## [1.8.3] - 2022-11-22 diff --git a/src/lightning_app/runners/multiprocess.py b/src/lightning_app/runners/multiprocess.py index 1f7e0b906ba4b..343996cbdd732 100644 --- a/src/lightning_app/runners/multiprocess.py +++ b/src/lightning_app/runners/multiprocess.py @@ -27,6 +27,7 @@ class MultiProcessRuntime(Runtime): """ backend: Union[str, Backend] = "multiprocessing" + _has_triggered_termination: bool = False def dispatch(self, *args: Any, on_before_run: Optional[Callable] = None, **kwargs: Any): """Method to dispatch and run the LightningApp.""" @@ -111,9 +112,11 @@ def dispatch(self, *args: Any, on_before_run: Optional[Callable] = None, **kwarg self.app._run() except KeyboardInterrupt: self.terminate() + self._has_triggered_termination = True raise finally: - self.terminate() + if not self._has_triggered_termination: + self.terminate() def terminate(self): if APP_SERVER_IN_CLOUD: