123456789101112131415161718192021222324252627282930313233 |
- from __future__ import absolute_import
- from threading import Event
- from apscheduler.schedulers.base import BaseScheduler, STATE_STOPPED
- from apscheduler.util import TIMEOUT_MAX
- class BlockingScheduler(BaseScheduler):
- """
- A scheduler that runs in the foreground
- (:meth:`~apscheduler.schedulers.base.BaseScheduler.start` will block).
- """
- _event = None
- def start(self, *args, **kwargs):
- self._event = Event()
- super(BlockingScheduler, self).start(*args, **kwargs)
- self._main_loop()
- def shutdown(self, wait=True):
- super(BlockingScheduler, self).shutdown(wait)
- self._event.set()
- def _main_loop(self):
- wait_seconds = TIMEOUT_MAX
- while self.state != STATE_STOPPED:
- self._event.wait(wait_seconds)
- self._event.clear()
- wait_seconds = self._process_jobs()
- def wakeup(self):
- self._event.set()
|