Skip to content

Commit c31c33e

Browse files
committed
swapped back to using Futures
1 parent f822afa commit c31c33e

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

src/fastcs/backend.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import asyncio
22
from collections import defaultdict
33
from collections.abc import Callable
4+
from concurrent.futures import Future
45
from types import MethodType
56

67
from softioc.asyncio_dispatcher import AsyncioDispatcher
@@ -19,8 +20,8 @@ def __init__(
1920
self._loop = self._dispatcher.loop
2021
self._controller = controller
2122

22-
self._initial_tasks = [controller.connect]
23-
self._scan_tasks: list[asyncio.Task] = []
23+
self._initial_coros = [controller.connect]
24+
self._scan_futures: set[Future] = set()
2425

2526
asyncio.run_coroutine_threadsafe(
2627
self._controller.initialise(), self._loop
@@ -41,25 +42,26 @@ def _link_process_tasks(self):
4142
_link_attribute_sender_class(single_mapping)
4243

4344
def __del__(self):
44-
self.stop_scan_tasks()
45+
self.stop_scan_futures()
4546

4647
def run(self):
47-
self._run_initial_tasks()
48-
self.start_scan_tasks()
48+
self._run_initial_futures()
49+
self.start_scan_futures()
4950
self._run()
5051

51-
def _run_initial_tasks(self):
52-
for task in self._initial_tasks:
52+
def _run_initial_futures(self):
53+
for task in self._initial_coros:
5354
future = asyncio.run_coroutine_threadsafe(task(), self._loop)
5455
future.result()
5556

56-
def start_scan_tasks(self):
57-
self._scan_tasks = [
58-
self._loop.create_task(coro()) for coro in _get_scan_coros(self._mapping)
59-
]
57+
def start_scan_futures(self):
58+
self._scan_futures = {
59+
asyncio.run_coroutine_threadsafe(coro(), self._loop)
60+
for coro in _get_scan_coros(self._mapping)
61+
}
6062

61-
def stop_scan_tasks(self):
62-
for task in self._scan_tasks:
63+
def stop_scan_futures(self):
64+
for task in self._scan_futures:
6365
if not task.done():
6466
try:
6567
task.cancel()

tests/test_backend.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def __init__(self, controller):
1010
super().__init__(controller)
1111

1212
self.init_task_called = False
13-
self._initial_tasks.append(self.init_task)
13+
self._initial_coros.append(self.init_task)
1414

1515
async def init_task(self):
1616
self.init_task_called = True
@@ -44,4 +44,4 @@ async def test_backend(controller):
4444
await asyncio.sleep(0.1)
4545
assert controller.count > count
4646

47-
backend.stop_scan_tasks()
47+
backend.stop_scan_futures()

0 commit comments

Comments
 (0)