gevent.py 763 B

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