Skip to content

Commit 35552b4

Browse files
Cancel pending tasks in __del__ methods only if possible (#85)
This helps eliminate a lot of warnings when running tests, where `Select` and `Merge` objects get destroyed after the event loop has closed.
2 parents 2565be8 + dec8f07 commit 35552b4

File tree

3 files changed

+6
-3
lines changed

3 files changed

+6
-3
lines changed

src/frequenz/channels/util/_merge.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ def __init__(self, *args: Receiver[T]) -> None:
4646
def __del__(self) -> None:
4747
"""Cleanup any pending tasks."""
4848
for task in self._pending:
49-
task.cancel()
49+
if not task.done() and task.get_loop().is_running():
50+
task.cancel()
5051

5152
async def stop(self) -> None:
5253
"""Stop the `Merge` instance and cleanup any pending tasks."""

src/frequenz/channels/util/_merge_named.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ def __init__(self, **kwargs: Receiver[T]) -> None:
3434
def __del__(self) -> None:
3535
"""Cleanup any pending tasks."""
3636
for task in self._pending:
37-
task.cancel()
37+
if not task.done() and task.get_loop().is_running():
38+
task.cancel()
3839

3940
async def stop(self) -> None:
4041
"""Stop the `MergeNamed` instance and cleanup any pending tasks."""

src/frequenz/channels/util/_select.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ def __init__(self, **kwargs: Receiver[Any]) -> None:
108108
def __del__(self) -> None:
109109
"""Cleanup any pending tasks."""
110110
for task in self._pending:
111-
task.cancel()
111+
if not task.done() and task.get_loop().is_running():
112+
task.cancel()
112113

113114
async def stop(self) -> None:
114115
"""Stop the `Select` instance and cleanup any pending tasks."""

0 commit comments

Comments
 (0)