|
| 1 | +from logging import getLogger |
1 | 2 | from typing import TYPE_CHECKING, List |
2 | 3 |
|
| 4 | +from taskiq.exceptions import ScheduledTaskCancelledError |
3 | 5 | from taskiq.kicker import AsyncKicker |
4 | 6 | from taskiq.scheduler.scheduled_task import ScheduledTask |
5 | 7 | from taskiq.utils import maybe_awaitable |
|
8 | 10 | from taskiq.abc.broker import AsyncBroker |
9 | 11 | from taskiq.abc.schedule_source import ScheduleSource |
10 | 12 |
|
| 13 | +logger = getLogger(__name__) |
| 14 | + |
11 | 15 |
|
12 | 16 | class TaskiqScheduler: |
13 | 17 | """Scheduler class.""" |
@@ -36,12 +40,16 @@ async def on_ready(self, source: "ScheduleSource", task: ScheduledTask) -> None: |
36 | 40 | It's triggered on proper time depending on `task.cron` or `task.time` attribute. |
37 | 41 | :param task: task to send |
38 | 42 | """ |
39 | | - await maybe_awaitable(source.pre_send(task)) |
40 | | - await AsyncKicker(task.task_name, self.broker, task.labels).kiq( |
41 | | - *task.args, |
42 | | - **task.kwargs, |
43 | | - ) |
44 | | - await maybe_awaitable(source.post_send(task)) |
| 43 | + try: |
| 44 | + await maybe_awaitable(source.pre_send(task)) |
| 45 | + except ScheduledTaskCancelledError: |
| 46 | + logger.info("Scheduled task %s has been cancelled.", task.task_name) |
| 47 | + else: |
| 48 | + await AsyncKicker(task.task_name, self.broker, task.labels).kiq( |
| 49 | + *task.args, |
| 50 | + **task.kwargs, |
| 51 | + ) |
| 52 | + await maybe_awaitable(source.post_send(task)) |
45 | 53 |
|
46 | 54 | async def shutdown(self) -> None: |
47 | 55 | """Shutdown the scheduler process.""" |
|
0 commit comments