Merge pull request #204 from tiqi-group/fix/task_finishing_gracefully

fix: return result of task after finishing gracefully
This commit is contained in:
Mose Müller 2025-01-20 06:13:31 +01:00 committed by GitHub
commit 192075057f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 1 deletions

View File

@ -169,7 +169,7 @@ class Task(pydase.data_service.data_service.DataService, Generic[R]):
while True: while True:
try: try:
await self._func() return await self._func()
except asyncio.CancelledError: except asyncio.CancelledError:
logger.info("Task '%s' was cancelled", self._func_name) logger.info("Task '%s' was cancelled", self._func_name)
raise raise

View File

@ -436,3 +436,24 @@ async def test_exit_on_failure_exceeding_rate_limit(
await asyncio.sleep(0.5) await asyncio.sleep(0.5)
assert "os.kill called with signal=" in caplog.text assert "os.kill called with signal=" in caplog.text
assert "Task 'my_task' encountered an exception" in caplog.text assert "Task 'my_task' encountered an exception" in caplog.text
@pytest.mark.asyncio(scope="function")
async def test_gracefully_finishing_task(
monkeypatch: pytest.MonkeyPatch, caplog: LogCaptureFixture
) -> None:
class MyService(pydase.DataService):
@task()
async def my_task(self) -> None:
print("Hello")
await asyncio.sleep(0.1)
service_instance = MyService()
state_manager = StateManager(service_instance)
DataServiceObserver(state_manager)
service_instance.my_task.start()
await asyncio.sleep(0.05)
assert service_instance.my_task.status == TaskStatus.RUNNING
await asyncio.sleep(0.1)
assert service_instance.my_task.status == TaskStatus.NOT_RUNNING