216 """register a function to be called every `interval` seconds. |
216 """register a function to be called every `interval` seconds. |
217 |
217 |
218 looping tasks can only be registered during repository initialization, |
218 looping tasks can only be registered during repository initialization, |
219 once done this method will fail. |
219 once done this method will fail. |
220 """ |
220 """ |
|
221 task = LoopTask(self, interval, func, args) |
221 if self.running: |
222 if self.running: |
222 raise RuntimeError("can't add looping task once the repository is started") |
223 self._start_task(task) |
223 self._tasks.append( (interval, func, args) ) |
224 else: |
|
225 self._tasks.append(task) |
|
226 |
|
227 def _start_task(self, task): |
|
228 self._looping_tasks.append(task) |
|
229 self.info('starting task %s with interval %.2fs', task.name, |
|
230 task.interval) |
|
231 task.start() |
224 |
232 |
225 def start(self): |
233 def start(self): |
226 """Start running looping task""" |
234 """Start running looping task""" |
227 assert self.running == False # bw compat purpose maintly |
235 assert self.running == False # bw compat purpose maintly |
228 |
|
229 while self._tasks: |
236 while self._tasks: |
230 interval, func, args = self._tasks.pop() |
237 task = self._tasks.pop() |
231 task = LoopTask(self, interval, func, args) |
238 self._start_task(task) |
232 self._looping_tasks.append(task) |
|
233 self.info('starting task %s with interval %.2fs', task.name, |
|
234 interval) |
|
235 task.start() |
|
236 |
|
237 self.running = True |
239 self.running = True |
238 |
240 |
239 def stop(self): |
241 def stop(self): |
240 """Stop all running task. |
242 """Stop all running task. |
241 |
243 |