diff --git a/src/pydase/task/autostart.py b/src/pydase/task/autostart.py new file mode 100644 index 0000000..075ce3c --- /dev/null +++ b/src/pydase/task/autostart.py @@ -0,0 +1,15 @@ +import pydase.data_service.data_service +import pydase.task.task +from pydase.utils.helpers import is_property_attribute + + +def autostart_service_tasks( + service: pydase.data_service.data_service.DataService, +) -> None: + for attr in dir(service): + if not is_property_attribute(service, attr): # prevent eval of property attrs + val = getattr(service, attr) + if isinstance(val, pydase.task.task.Task) and val.autostart: + val.start() + elif isinstance(val, pydase.DataService): + autostart_service_tasks(val) diff --git a/src/pydase/task/task.py b/src/pydase/task/task.py index 7f3ecac..21c863d 100644 --- a/src/pydase/task/task.py +++ b/src/pydase/task/task.py @@ -57,6 +57,12 @@ class Task(pydase.data_service.data_service.DataService, Generic[R]): self._status = TaskStatus.NOT_RUNNING self._result: R | None = None + @property + def autostart(self) -> bool: + """Defines if the task should be started automatically when the `pydase.Server` + starts.""" + return self._autostart + @property def status(self) -> TaskStatus: return self._status @@ -129,7 +135,4 @@ class Task(pydase.data_service.data_service.DataService, Generic[R]): self._loop = asyncio.get_event_loop() self._bound_func = self._func.__get__(instance, owner) self._set_up = True - - if self._autostart: - self.start() return self