gevent.py 761 B

1234567891011121314151617181920212223242526272829
  1. import sys
  2. from apscheduler.executors.base import BaseExecutor, run_job
  3. try:
  4. import gevent
  5. except ImportError as exc: # pragma: nocover
  6. raise ImportError("GeventExecutor requires gevent installed") from exc
  7. class GeventExecutor(BaseExecutor):
  8. """
  9. Runs jobs as greenlets.
  10. Plugin alias: ``gevent``
  11. """
  12. def _do_submit_job(self, job, run_times):
  13. def callback(greenlet):
  14. try:
  15. events = greenlet.get()
  16. except BaseException:
  17. self._run_job_error(job.id, *sys.exc_info()[1:])
  18. else:
  19. self._run_job_success(job.id, events)
  20. gevent.spawn(
  21. run_job, job, job._jobstore_alias, run_times, self._logger.name
  22. ).link(callback)