@@ -121,6 +121,8 @@ def __init__(
121
121
122
122
self ._before_loop = None
123
123
self ._after_loop = None
124
+ self ._before_loop_running = False
125
+ self ._after_loop_running = False
124
126
self ._is_being_cancelled = False
125
127
self ._has_failed = False
126
128
self ._stop_next_iteration = False
@@ -141,11 +143,17 @@ async def _call_loop_function(self, name: str, *args: Any, **kwargs: Any) -> Non
141
143
if coro is None :
142
144
return
143
145
146
+ if name .endswith ('_loop' ):
147
+ setattr (self , f'_{ name } _running' , True )
148
+
144
149
if self ._injected is not None :
145
150
await coro (self ._injected , * args , ** kwargs )
146
151
else :
147
152
await coro (* args , ** kwargs )
148
153
154
+ if name .endswith ('_loop' ):
155
+ setattr (self , f'_{ name } _running' , False )
156
+
149
157
def _try_sleep_until (self , dt : datetime .datetime ):
150
158
self ._handle = SleepHandle (dt = dt , loop = self .loop )
151
159
return self ._handle .wait ()
@@ -680,7 +688,7 @@ def change_interval(
680
688
self ._time = self ._get_time_parameter (time )
681
689
self ._sleep = self ._seconds = self ._minutes = self ._hours = MISSING
682
690
683
- if self .is_running ():
691
+ if self .is_running () and not ( self . _before_loop_running or self . _after_loop_running ) :
684
692
if self ._time is not MISSING :
685
693
# prepare the next time index starting from after the last iteration
686
694
self ._prepare_time_index (now = self ._last_iteration )
0 commit comments