From f6b8970bd110f6e0be9ed3b440e49ba1d0a3daee Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sun, 4 Aug 2024 16:26:43 +1000 Subject: [PATCH] fix(app): create reference to events task to prevent accidental GC This wasn't a problem, but it's advised in the official docs so I've done it. --- invokeai/app/services/events/events_fastapievents.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/invokeai/app/services/events/events_fastapievents.py b/invokeai/app/services/events/events_fastapievents.py index 04abc0239d..3c46b37fd6 100644 --- a/invokeai/app/services/events/events_fastapievents.py +++ b/invokeai/app/services/events/events_fastapievents.py @@ -13,7 +13,13 @@ class FastAPIEventService(EventServiceBase): self._queue = asyncio.Queue[EventBase | None]() self._stop_event = threading.Event() self._loop = loop - self._loop.create_task(self._dispatch_from_queue(stop_event=self._stop_event)) + + # We need to store a reference to the task so it doesn't get GC'd + # See: https://docs.python.org/3/library/asyncio-task.html#creating-tasks + self._background_tasks: set[asyncio.Task[None]] = set() + task = self._loop.create_task(self._dispatch_from_queue(stop_event=self._stop_event)) + self._background_tasks.add(task) + task.add_done_callback(self._background_tasks.remove) super().__init__()