aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py
diff options
context:
space:
mode:
Diffstat (limited to '.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py')
-rw-r--r--.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py b/.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py
new file mode 100644
index 00000000..e32ad643
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/apscheduler/schedulers/gevent.py
@@ -0,0 +1,34 @@
+from apscheduler.schedulers.base import BaseScheduler
+from apscheduler.schedulers.blocking import BlockingScheduler
+
+try:
+ import gevent
+ from gevent.event import Event
+ from gevent.lock import RLock
+except ImportError as exc: # pragma: nocover
+ raise ImportError("GeventScheduler requires gevent installed") from exc
+
+
+class GeventScheduler(BlockingScheduler):
+ """A scheduler that runs as a Gevent greenlet."""
+
+ _greenlet = None
+
+ def start(self, *args, **kwargs):
+ self._event = Event()
+ BaseScheduler.start(self, *args, **kwargs)
+ self._greenlet = gevent.spawn(self._main_loop)
+ return self._greenlet
+
+ def shutdown(self, *args, **kwargs):
+ super().shutdown(*args, **kwargs)
+ self._greenlet.join()
+ del self._greenlet
+
+ def _create_lock(self):
+ return RLock()
+
+ def _create_default_executor(self):
+ from apscheduler.executors.gevent import GeventExecutor
+
+ return GeventExecutor()