@@ -197,6 +197,7 @@ def __init__(self, app, schedule=None, max_interval=None,
197197 self .max_interval )
198198 self .Producer = Producer or app .amqp .Producer
199199 self ._heap = None
200+ self .old_schedulers = None
200201 self .sync_every_tasks = (
201202 app .conf .beat_sync_every if sync_every_tasks is None
202203 else sync_every_tasks )
@@ -257,7 +258,9 @@ def tick(self, event_t=event_t, min=min, heappop=heapq.heappop,
257258 adjust = self .adjust
258259 max_interval = self .max_interval
259260
260- if self ._heap is None :
261+ if (self ._heap is None or
262+ not self .schedules_equal (self .old_schedulers , self .schedule )):
263+ self .old_schedulers = self .schedule
261264 self .populate_heap ()
262265
263266 H = self ._heap
@@ -281,6 +284,18 @@ def tick(self, event_t=event_t, min=min, heappop=heapq.heappop,
281284 return min (verify [0 ], max_interval )
282285 return min (adjust (next_time_to_run ) or max_interval , max_interval )
283286
287+ def schedules_equal (self , a , b ):
288+ if a .keys () != b .keys ():
289+ return False
290+ for name , model in a .items ():
291+ b_model = b .get (name )
292+ if not b_model :
293+ return False
294+ if (hasattr (model .schedule , '__repr__' ) and
295+ model .schedule .__repr__ () != b_model .schedule .__repr__ ()):
296+ return False
297+ return True
298+
284299 def should_sync (self ):
285300 return (
286301 (not self ._last_sync or
0 commit comments