fix: добавить add_done_callback в Scheduler._task
Если _scheduler_loop завершится с неожиданной ошибкой (не CancelledError), это теперь залогировано через _on_task_done callback. Штатное завершение через cancel() пропускается без логов.
This commit is contained in:
parent
81a99aaeab
commit
8b59ddb0c9
@ -157,8 +157,21 @@ class Scheduler:
|
||||
return
|
||||
self._running = True
|
||||
self._task = asyncio.create_task(self._scheduler_loop())
|
||||
self._task.add_done_callback(self._on_task_done)
|
||||
logger.info("Планировщик запущен (время: %s)", self.morning_time)
|
||||
|
||||
def _on_task_done(self, task: asyncio.Task) -> None:
|
||||
"""Логировать нештатное завершение task.
|
||||
|
||||
CancelledError — штатное завершение при stop(), поэтому пропускается.
|
||||
Любое другое исключение — признак ошибки в _scheduler_loop.
|
||||
"""
|
||||
if task.cancelled():
|
||||
return
|
||||
exc = task.exception()
|
||||
if exc and not isinstance(exc, asyncio.CancelledError):
|
||||
logger.error("Scheduler завершился с ошибкой: %s", exc)
|
||||
|
||||
def _stop_scheduler(self):
|
||||
if self._task and not self._task.done():
|
||||
self._task.cancel()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user