From 96c1dc7365afb50b6f3e33dfd6889374afd533d3 Mon Sep 17 00:00:00 2001 From: Christoph Reiter Date: Sat, 22 Apr 2023 20:33:31 +0200 Subject: [PATCH] Make sure to keep a reference to asyncio tasks as suggested in the docs --- app/__init__.py | 7 ++++++- app/fetch.py | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 52ddaec..0d53140 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -21,11 +21,16 @@ if not os.environ.get("NO_MIDDLEWARE"): app.middleware("http")(check_is_ready) +_background_tasks = set() + + # https://github.com/tiangolo/fastapi/issues/1480 @app.on_event("startup") async def startup_event() -> None: if not os.environ.get("NO_UPDATE_THREAD"): - asyncio.create_task(update_loop()) + task = asyncio.create_task(update_loop()) + _background_tasks.add(task) + task.add_done_callback(_background_tasks.discard) @webapp.exception_handler(Exception) diff --git a/app/fetch.py b/app/fetch.py index 1ed1a74..63112c4 100644 --- a/app/fetch.py +++ b/app/fetch.py @@ -435,9 +435,13 @@ async def trigger_loop() -> None: await asyncio.sleep(UPDATE_INTERVAL) queue_update() +_background_tasks = set() + async def update_loop() -> None: - asyncio.create_task(trigger_loop()) + task = asyncio.create_task(trigger_loop()) + _background_tasks.add(task) + task.add_done_callback(_background_tasks.discard) while True: async with _rate_limit: print("check for updates")