From 6d18f7549c2c1fee6c60222848552fa6f4ddbee5 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Fri, 10 Nov 2023 16:49:22 +0100 Subject: [PATCH] Repair cancellation-overtaking-normal-termination issue with turn.external --- syndicate/actor.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/syndicate/actor.py b/syndicate/actor.py index 602e79c..6fff80d 100644 --- a/syndicate/actor.py +++ b/syndicate/actor.py @@ -26,7 +26,6 @@ def run_system(**kwargs): class System: def __init__(self, loop = None): - self.tasks = set() self.loop = loop or asyncio.get_event_loop() self.inhabitant_count = 0 @@ -53,18 +52,13 @@ class System: def queue_task(self, thunk): async def task(): - try: - await ensure_awaitable(thunk()) - finally: - self.tasks.remove(t) - t = self.loop.create_task(task()) - self.tasks.add(t) - return t + await ensure_awaitable(thunk()) + return self.loop.create_task(task()) def queue_task_threadsafe(self, thunk): async def task(): await ensure_awaitable(thunk()) - return asyncio.run_coroutine_threadsafe(task(), self.loop) + return self.loop.call_soon_threadsafe(lambda: asyncio.run_coroutine_threadsafe(task(), self.loop)) async def ensure_awaitable(value): if inspect.isawaitable(value):