@@ -26,7 +26,7 @@ async def schedules_updater(
26
26
:param scheduler: current scheduler.
27
27
:param current_schedules: list of schedules.
28
28
"""
29
- while True :
29
+ while True : # noqa: WPS457
30
30
logger .debug ("Started schedule update." )
31
31
new_schedules : "List[ScheduledTask]" = []
32
32
for source in scheduler .sources :
@@ -40,8 +40,7 @@ async def schedules_updater(
40
40
logger .debug (exc , exc_info = True )
41
41
continue
42
42
43
- for schedule in scheduler .merge_func (new_schedules , schedules ):
44
- new_schedules .append (schedule )
43
+ new_schedules = scheduler .merge_func (new_schedules , schedules )
45
44
46
45
current_schedules .clear ()
47
46
current_schedules .extend (new_schedules )
@@ -62,38 +61,15 @@ def should_run(task: ScheduledTask) -> bool:
62
61
return False
63
62
64
63
65
- async def run_scheduler ( args : SchedulerArgs ) -> None : # noqa: C901, WPS210, WPS213
64
+ async def _run_loop ( scheduler : TaskiqScheduler ) -> None :
66
65
"""
67
66
Runs scheduler loop.
68
67
69
68
This function imports taskiq scheduler
70
69
and runs tasks when needed.
71
70
72
- :param args: parsed CLI args .
71
+ :param scheduler: current scheduler .
73
72
"""
74
- if isinstance (args .scheduler , str ):
75
- scheduler = import_object (args .scheduler )
76
- else :
77
- scheduler = args .scheduler
78
- if not isinstance (scheduler , TaskiqScheduler ):
79
- print ( # noqa: WPS421
80
- "Imported scheduler is not a subclass of TaskiqScheduler." ,
81
- )
82
- exit (1 ) # noqa: WPS421
83
- scheduler .broker .is_scheduler_process = True
84
- import_tasks (args .modules , args .tasks_pattern , args .fs_discover )
85
- if args .configure_logging :
86
- basicConfig (
87
- level = getLevelName (args .log_level ),
88
- format = (
89
- "[%(asctime)s][%(levelname)-7s]"
90
- "[%(module)s:%(funcName)s:%(lineno)d]"
91
- " %(message)s"
92
- ),
93
- )
94
- getLogger ("taskiq" ).setLevel (level = getLevelName (args .log_level ))
95
- for source in scheduler .sources :
96
- await source .startup ()
97
73
loop = asyncio .get_event_loop ()
98
74
tasks : "List[ScheduledTask]" = []
99
75
loop .create_task (schedules_updater (scheduler , tasks ))
@@ -121,3 +97,44 @@ async def run_scheduler(args: SchedulerArgs) -> None: # noqa: C901, WPS210, WPS
121
97
- datetime .now ()
122
98
)
123
99
await asyncio .sleep (delay .total_seconds ())
100
+
101
+
102
+ async def run_scheduler (args : SchedulerArgs ) -> None : # noqa: WPS213
103
+ """
104
+ Run scheduler.
105
+
106
+ This function takes all CLI arguments
107
+ and starts the scheduler process.
108
+
109
+ :param args: parsed CLI arguments.
110
+ """
111
+ if isinstance (args .scheduler , str ):
112
+ scheduler = import_object (args .scheduler )
113
+ else :
114
+ scheduler = args .scheduler
115
+ if not isinstance (scheduler , TaskiqScheduler ):
116
+ print ( # noqa: WPS421
117
+ "Imported scheduler is not a subclass of TaskiqScheduler." ,
118
+ )
119
+ exit (1 ) # noqa: WPS421
120
+ scheduler .broker .is_scheduler_process = True
121
+ import_tasks (args .modules , args .tasks_pattern , args .fs_discover )
122
+ if args .configure_logging :
123
+ basicConfig (
124
+ level = getLevelName (args .log_level ),
125
+ format = (
126
+ "[%(asctime)s][%(levelname)-7s]"
127
+ "[%(module)s:%(funcName)s:%(lineno)d]"
128
+ " %(message)s"
129
+ ),
130
+ )
131
+ getLogger ("taskiq" ).setLevel (level = getLevelName (args .log_level ))
132
+ for source in scheduler .sources :
133
+ await source .startup ()
134
+
135
+ try :
136
+ await _run_loop (scheduler )
137
+ except asyncio .CancelledError :
138
+ logger .warning ("Shutting down scheduler." )
139
+ await scheduler .shutdown ()
140
+ logger .info ("Scheduler shut down. Good bye!" )
0 commit comments