background.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from __future__ import absolute_import
  2. from threading import Thread, Event
  3. from apscheduler.schedulers.base import BaseScheduler
  4. from apscheduler.schedulers.blocking import BlockingScheduler
  5. from apscheduler.util import asbool
  6. class BackgroundScheduler(BlockingScheduler):
  7. """
  8. A scheduler that runs in the background using a separate thread
  9. (:meth:`~apscheduler.schedulers.base.BaseScheduler.start` will return immediately).
  10. Extra options:
  11. ========== =============================================================================
  12. ``daemon`` Set the ``daemon`` option in the background thread (defaults to ``True``, see
  13. `the documentation
  14. <https://docs.python.org/3.4/library/threading.html#thread-objects>`_
  15. for further details)
  16. ========== =============================================================================
  17. """
  18. _thread = None
  19. def _configure(self, config):
  20. self._daemon = asbool(config.pop('daemon', True))
  21. super(BackgroundScheduler, self)._configure(config)
  22. def start(self, *args, **kwargs):
  23. self._event = Event()
  24. BaseScheduler.start(self, *args, **kwargs)
  25. self._thread = Thread(target=self._main_loop, name='APScheduler')
  26. self._thread.daemon = self._daemon
  27. self._thread.start()
  28. def shutdown(self, *args, **kwargs):
  29. super(BackgroundScheduler, self).shutdown(*args, **kwargs)
  30. self._thread.join()
  31. del self._thread