From 4dfb3f9ab382e34feee9d6d0c68852a0a6328a17 Mon Sep 17 00:00:00 2001 From: David Trattnig <david@subsquare.at> Date: Fri, 14 Jan 2022 18:28:06 +0100 Subject: [PATCH] Improve graceful shutdown. #88 --- run.py | 21 ++++++++++----------- src/engine.py | 2 ++ src/scheduling/api.py | 2 +- src/scheduling/programme.py | 2 +- src/scheduling/scheduler.py | 2 +- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/run.py b/run.py index f56e0569..f50c6319 100755 --- a/run.py +++ b/run.py @@ -26,6 +26,7 @@ import os import sys import signal import logging +import threading from flask import Flask from flask_sqlalchemy import SQLAlchemy @@ -54,7 +55,6 @@ class EngineRunner: logger = None config = None engine = None - lqs = None def __init__(self): @@ -64,12 +64,12 @@ class EngineRunner: self.config = config AuraLogger(self.config) self.logger = logging.getLogger("AuraEngine") - + def run(self): """ Starts Engine Core. - """ + """ from src.engine import Engine self.engine = Engine() @@ -86,15 +86,14 @@ class EngineRunner: """ Shutdown of the engine. Also terminates the Liquidsoap thread. """ + for thread in threading.enumerate(): + self.logger.info(thread.name) + if self.engine: self.engine.terminate() - if self.lqs: - self.lqs.terminate() - self.logger.info("Terminated Liquidsoap") - - self.logger.info("Gracefully terminated Aura Engine! (signum:%s, frame:%s)" % (signum, frame)) - sys.exit(0) + self.logger.info(f"Gracefully terminated Aura Engine! (signum:{signum}, frame:{frame})") + sys.exit(0) @@ -103,7 +102,7 @@ class EngineRunner: # -if __name__ == "__main__": +if __name__ == "__main__": runner = EngineRunner() signal.signal(signal.SIGINT, runner.exit_gracefully) signal.signal(signal.SIGTERM, runner.exit_gracefully) @@ -112,5 +111,5 @@ if __name__ == "__main__": if "--recreate-database" in sys.argv: runner.recreate_db() sys.exit(0) - + runner.run() diff --git a/src/engine.py b/src/engine.py index da4e963e..af8aebed 100644 --- a/src/engine.py +++ b/src/engine.py @@ -167,10 +167,12 @@ class Engine(): """ Terminates the engine and all related processes. """ + if self.scheduler: self.scheduler.terminate() if self.eci: self.eci.terminate() + # # PLAYER # diff --git a/src/scheduling/api.py b/src/scheduling/api.py index c7e97657..e566c1aa 100644 --- a/src/scheduling/api.py +++ b/src/scheduling/api.py @@ -304,5 +304,5 @@ class ApiFetcher(threading.Thread): """ Terminates the thread. """ - self.logger.info("Shutting down API fetcher...") + self.logger.info(SU.yellow("[ApiFetcher] Shutting down...")) self.stop_event.set() diff --git a/src/scheduling/programme.py b/src/scheduling/programme.py index 3c29ca13..fb15cdfe 100644 --- a/src/scheduling/programme.py +++ b/src/scheduling/programme.py @@ -230,7 +230,7 @@ class ProgrammeService(): """ Called when thread is stopped or a signal to terminate is received. """ - self.logger.info("Shutting down programme service ...") + self.logger.info(SU.yellow("[ProgrammeService] Shutting down...")) if self.api_fetcher: self.api_fetcher.terminate() diff --git a/src/scheduling/scheduler.py b/src/scheduling/scheduler.py index 62cbfd5d..a9728f72 100644 --- a/src/scheduling/scheduler.py +++ b/src/scheduling/scheduler.py @@ -407,7 +407,7 @@ class AuraScheduler(threading.Thread): """ Called when thread is stopped or a signal to terminate is received. """ - self.logger.info("Shutting down scheduler ...") + self.logger.info(SU.yellow("[Scheduler] Shutting down...")) self.programme.terminate() self.exit_event.set() -- GitLab