From b0e05c7da57855e0cfd4030d4d794c43ae3ea5d3 Mon Sep 17 00:00:00 2001 From: Jan Losinski Date: Sat, 26 Jan 2019 22:11:58 +0100 Subject: [PATCH] Gracefully stop consumer and refresher --- service.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/service.py b/service.py index f9adada..1ac1cd8 100755 --- a/service.py +++ b/service.py @@ -2,6 +2,7 @@ import argparse import asyncio +import signal import logbook import uvloop @@ -62,6 +63,17 @@ if __name__ == "__main__": models.create_db(config) logger.info("Database created.") + on_stop = [] + + + def _stop(): + for cb in on_stop: + cb() + + + loop.add_signal_handler(signal.SIGTERM, _stop) + loop.add_signal_handler(signal.SIGINT, _stop) + wallabag = Wallabag(config) sender = Sender(loop, config.smtp_from, config.smtp_host, config.smtp_port, config.smtp_user, config.smtp_passwd) @@ -69,11 +81,13 @@ if __name__ == "__main__": logger.info("Create Refresher") refresher = Refresher(config, wallabag, sender) loop.create_task(refresher.refresh()) + on_stop.append(lambda: refresher.stop()) if args.consumer: logger.info("Create Consumer") consumer = Consumer(wallabag, config, sender) loop.create_task(consumer.consume()) + on_stop.append(lambda: consumer.stop()) if args.interface: logger.info("Create Interface")