From e1de84cb86d1ad89b53c78c4611ef10786527057 Mon Sep 17 00:00:00 2001 From: Daniel Lashua Date: Mon, 30 Nov 2020 06:41:43 -0600 Subject: [PATCH 1/3] use list for unique_task2name --- custom_components/pyscript/function.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/custom_components/pyscript/function.py b/custom_components/pyscript/function.py index ea98308..e546b7d 100644 --- a/custom_components/pyscript/function.py +++ b/custom_components/pyscript/function.py @@ -164,7 +164,10 @@ async def task_unique(name, kill_me=False): pass if curr_task in cls.our_tasks: cls.unique_name2task[name] = curr_task - cls.unique_task2name[curr_task] = name + if curr_task not in cls.unique_task2name: + cls.unique_task2name[curr_task] = [] + if name not in cls.unique_task2name[curr_task]: + cls.unique_task2name[curr_task].append(name) return task_unique @@ -296,7 +299,8 @@ async def run_coro(cls, coro): _LOGGER.error("run_coro: got exception %s", traceback.format_exc(-1)) finally: if task in cls.unique_task2name: - del cls.unique_name2task[cls.unique_task2name[task]] + for name in cls.unique_task2name[task]: + del cls.unique_name2task[name] del cls.unique_task2name[task] if task in cls.task2context: del cls.task2context[task] From a90447eafab4fac4e2934ce6967aec2d0362e9ef Mon Sep 17 00:00:00 2001 From: Daniel Lashua Date: Mon, 30 Nov 2020 07:09:39 -0600 Subject: [PATCH 2/3] also clean name from previous task list --- custom_components/pyscript/function.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/custom_components/pyscript/function.py b/custom_components/pyscript/function.py index e546b7d..bd5b825 100644 --- a/custom_components/pyscript/function.py +++ b/custom_components/pyscript/function.py @@ -163,6 +163,11 @@ async def task_unique(name, kill_me=False): except asyncio.CancelledError: pass if curr_task in cls.our_tasks: + if name in cls.unique_name2task: + task = cls.unique_name2task[name] + if task in cls.unique_task2name: + if name in cls.unique_task2name[task]: + cls.unique_task2name[task].remove(name) cls.unique_name2task[name] = curr_task if curr_task not in cls.unique_task2name: cls.unique_task2name[curr_task] = [] From a41fee020541568bc3f70a976ed44a9a4cde9c5c Mon Sep 17 00:00:00 2001 From: Daniel Lashua Date: Tue, 1 Dec 2020 05:01:03 -0600 Subject: [PATCH 3/3] use a set for task2name --- custom_components/pyscript/function.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/custom_components/pyscript/function.py b/custom_components/pyscript/function.py index bd5b825..04ff173 100644 --- a/custom_components/pyscript/function.py +++ b/custom_components/pyscript/function.py @@ -166,13 +166,11 @@ async def task_unique(name, kill_me=False): if name in cls.unique_name2task: task = cls.unique_name2task[name] if task in cls.unique_task2name: - if name in cls.unique_task2name[task]: - cls.unique_task2name[task].remove(name) + cls.unique_task2name[task].discard(name) cls.unique_name2task[name] = curr_task if curr_task not in cls.unique_task2name: - cls.unique_task2name[curr_task] = [] - if name not in cls.unique_task2name[curr_task]: - cls.unique_task2name[curr_task].append(name) + cls.unique_task2name[curr_task] = set() + cls.unique_task2name[curr_task].add(name) return task_unique