55
66from pycron import is_now
77
8+ from taskiq .abc .broker import AsyncBroker
89from taskiq .cli .scheduler .args import SchedulerArgs
910from taskiq .cli .utils import import_object , import_tasks
10- from taskiq .kicker import AsyncKicker
1111from taskiq .scheduler .scheduler import ScheduledTask , TaskiqScheduler
1212
1313logger = getLogger (__name__ )
@@ -40,8 +40,10 @@ async def schedules_updater(
4040 )
4141 logger .debug (exc , exc_info = True )
4242 continue
43+
4344 for schedule in scheduler .merge_func (new_schedules , schedules ):
4445 new_schedules .append (schedule )
46+
4547 current_schedules .clear ()
4648 current_schedules .extend (new_schedules )
4749 await asyncio .sleep (scheduler .refresh_delay )
@@ -55,7 +57,7 @@ def should_run(task: ScheduledTask) -> bool:
5557 :return: True if task must be sent.
5658 """
5759 if task .cron is not None :
58- return is_now (task .cron )
60+ return is_now (task .cron , datetime . utcnow () )
5961 if task .time is not None :
6062 return task .time <= datetime .utcnow ()
6163 return False
@@ -70,6 +72,7 @@ async def run_scheduler(args: SchedulerArgs) -> None: # noqa: C901, WPS210, WPS
7072
7173 :param args: parsed CLI args.
7274 """
75+ AsyncBroker .is_scheduler_process = True
7376 if isinstance (args .scheduler , str ):
7477 scheduler = import_object (args .scheduler )
7578 else :
@@ -98,7 +101,6 @@ async def run_scheduler(args: SchedulerArgs) -> None: # noqa: C901, WPS210, WPS
98101 await scheduler .startup ()
99102 logger .info ("Startup completed." )
100103 while True : # noqa: WPS457
101- not_fired_tasks = []
102104 for task in tasks :
103105 try :
104106 ready = should_run (task )
@@ -111,14 +113,8 @@ async def run_scheduler(args: SchedulerArgs) -> None: # noqa: C901, WPS210, WPS
111113 continue
112114 if ready :
113115 logger .info ("Sending task %s." , task .task_name )
114- loop .create_task (
115- AsyncKicker (task .task_name , scheduler .broker , task .labels ).kiq (
116- * task .args ,
117- ** task .kwargs ,
118- ),
119- )
120- else :
121- not_fired_tasks .append (task )
116+ loop .create_task (scheduler .on_ready (task ))
117+
122118 delay = (
123119 datetime .now ().replace (second = 1 , microsecond = 0 )
124120 + timedelta (minutes = 1 )
0 commit comments