Skip to content

Commit aa7e744

Browse files
committed
do not reference _loop
1 parent cd4138b commit aa7e744

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

yaqd_horiba/_horiba_mono.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
from yaqd_core import HasTurret, IsHomeable, HasLimits, HasPosition, IsDaemon
77

8+
from ._taskset import TaskSet
9+
810

911
__all__ = ["HoribaMono"]
1012

@@ -58,6 +60,7 @@ def __init__(self, name, config, config_filepath):
5860
self.serial = self._dev.serial_number
5961
self._gratings = config["gratings"]
6062
self._units = "nm"
63+
self.tasks = TaskSet()
6164

6265
if self._state["turret"] is None:
6366
self._state["turret"] = list(self._gratings.keys())[0]
@@ -87,7 +90,7 @@ async def _reset_position(self):
8790
def home(self):
8891
# Send "Initialize command, which homes the motor"
8992
self._dev.ctrl_transfer(0x40, 0xB3, wValue=0, wIndex=0)
90-
self._loop.create_task(self._reset_position())
93+
self.tasks.from_coro(self._reset_position())
9194

9295
def set_turret(self, identifier):
9396
if identifier not in self._gratings:
@@ -96,7 +99,7 @@ def set_turret(self, identifier):
9699
self.logger.debug(self._state["turret"], identifier)
97100
if identifier != self._state["turret"]:
98101
self._state["turret"] = identifier
99-
self._loop.create_task(self._reset_position())
102+
self.tasks.from_coro(self._reset_position())
100103

101104
def get_turret(self):
102105
return self._state["turret"]

yaqd_horiba/_taskset.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
"""helper for keeping tasks from premature garbage collection
2+
"""
3+
4+
5+
import asyncio
6+
7+
8+
class TaskSet(set):
9+
"""container class for tasks to keep strong references"""
10+
def add(self, task:asyncio.Task):
11+
super().add(task)
12+
task.add_done_callback(self.discard)
13+
14+
def from_coro(self, coro):
15+
"""create task and add to running loop"""
16+
task = asyncio.get_running_loop().create_task(coro)
17+
self.add(task)
18+

0 commit comments

Comments
 (0)