diff --git a/module_build_service/scheduler/events.py b/module_build_service/scheduler/events.py index b02dc7bf..c7eaf573 100644 --- a/module_build_service/scheduler/events.py +++ b/module_build_service/scheduler/events.py @@ -15,6 +15,7 @@ however Brew sends to topic brew.build.complete, etc. from __future__ import absolute_import from functools import wraps import sched +import threading import time from module_build_service.common import log @@ -40,6 +41,10 @@ class Scheduler(sched.scheduler): are executed. """ + def __init__(self, *args, **kwargs): + sched.scheduler.__init__(self, *args, **kwargs) + self.local = threading.local() + def add(self, handler, arguments=()): """ Schedule execution of `handler` with `arguments`. @@ -50,10 +55,20 @@ class Scheduler(sched.scheduler): """ Runs scheduled handlers. """ - log.debug("Running event scheduler with following events:") - for event in self.queue: - log.debug(" %r", event) - sched.scheduler.run(self) + if getattr(self.local, 'running', False): + return + + try: + self.local.running = True + # Note that events that are added during the execution of the + # handlers are executed as part of the .run() call without + # further logging. + log.debug("Running event scheduler with following events:") + for event in self.queue: + log.debug(" %r", event) + sched.scheduler.run(self) + finally: + self.local.running = False def reset(self): """