
-
6943
at 2009-11-06 23:01:29
by vinces1979@gmail.com
Index: /projects/TGScheduler/trunk/tgscheduler/scheduler.py
===================================================================
--- /projects/TGScheduler/trunk/tgscheduler/scheduler.py (revision 6943)
+++ /projects/TGScheduler/trunk/tgscheduler/scheduler.py (revision 6943)
@@ -0,0 +1,91 @@
+""" create the scheduler object and expose function """
+
+import kronos
+from kronos import method
+import atexit
+import logging
+
+log = logging.getLogger("tgscheduler")
+
+class Scheduler:
+ """ Handle Task Scheduling """
+
+ def __init__(self):
+ self._scheduler_instance = None
+
+ def start_scheduler(self):
+ """ start the scheduler, and register shutdown at exit """
+
+ log.info("Starting Scheduler")
+ si = self._get_scheduler()
+ si.start()
+ atexit.register(self.stop_scheduler)
+ return si
+
+ def stop_scheduler(self):
+ """ stop the scheduler """
+
+ log.info("Shutting down scheduler")
+ if not self._scheduler_instance:
+ return
+ si = self._get_scheduler()
+ si.stop()
+
+ def _get_scheduler(self):
+ """ find available scheduler """
+
+ if not self._scheduler_instance:
+ if hasattr(kronos, "ThreadedScheduler"):
+ log.debug("Using threaded scheduler")
+ self._scheduler_instance = kronos.ThreadedScheduler()
+ elif hasattr(kronos, "ForkedScheduler"):
+ log.debug("Using Forked scheduler")
+ self._scheduler_instance = kronos.ForkedScheduler()
+ else:
+ log.debug("Using Sequential scheduler")
+ self._scheduler_instance = kronos.Scheduler()
+
+ return self._scheduler_instance
+
+ def add_interval_task(self, action, interval, args=None, kw=None, initialdelay=0,
+ processmethod=method.threaded, taskname=None):
+ si = self._get_scheduler()
+ return si.add_interval_task(action=action, interval=interval, args=args,
+ kw=kw, initialdelay=initialdelay, processmethod=processmethod,
+ taskname=taskname)
+
+ def add_single_task(self, action, args=None, kw=None, initialdelay=0,
+ processmethod=method.threaded, taskname=None):
+ si = self._get_scheduler()
+ return si.add_single_task(action=action, args=args, kw=kw,
+ initialdelay=initialdelay, processmethod=processmethod,
+ taskname=taskname)
+
+ def add_weekday_task(self, action, weekdays, timeonday, args=None, kw=None,
+ processmethod=method.threaded, taskname=None):
+ si = self._get_scheduler()
+ return si.add_daytime_task(action=action, taskname=taskname,
+ weekdays=weekdays, monthdays=None, timeonday=timeonday,
+ processmethod=processmethod, args=args, kw=kw)
+
+ def add_monthday_task(self, action, monthdays, timeonday, args=None, kw=None,
+ processmethod=method.threaded, taskname=None):
+ si = self._get_scheduler()
+ return si.add_daytime_task(action=action, taskname=taskname,
+ weekdays=None, monthdays=monthdays, timeonday=timeonday,
+ processmethod=processmethod, args=args, kw=kw)
+
+ def cancel(self, task):
+ si = self._get_scheduler()
+ si.cancel(task)
+
+scheduler = Scheduler()
+
+#: backwards compatibility
+start_scheduler = scheduler.start_scheduler
+stop_scheduler = scheduler.stop_scheduler
+
+add_monthly_task = scheduler.add_monthday_task
+add_weekday_task = scheduler.add_weekday_task
+add_single_task = scheduler.add_single_task
+add_interval_task = scheduler.add_interval_task
Index: /projects/TGScheduler/trunk/tgscheduler/__init__.py
===================================================================
--- /projects/TGScheduler/trunk/tgscheduler/__init__.py (revision 6940)
+++ /projects/TGScheduler/trunk/tgscheduler/__init__.py (revision 6943)
@@ -1,73 +1,5 @@
""" Scheduled background tasks using kronos.py """
-import kronos as scheduler
-from kronos import method
-import atexit
-import logging
-
-log = logging.getLogger("tgscheduler")
-
-_scheduler_instance = None
-
-def start_scheduler():
- log.info("Starting Scheduler")
- si = _get_scheduler()
- si.start()
- atexit.register(stop_scheduler)
-
-def stop_scheduler():
- log.info("Shutting down scheduler")
- if not _scheduler_instance:
- return
- si = _get_scheduler()
- si.stop()
-
-def _get_scheduler():
- """ find available scheduler """
- global _scheduler_instance
- si = _scheduler_instance
- if not si:
- if hasattr(scheduler, "ThreadedScheduler"):
- log.debug("Using threaded scheduler")
- si = scheduler.ThreadedScheduler()
- elif hasattr(scheduler, "ForkedScheduler"):
- log.debug("Using Forked scheduler")
- si = scheduler.ForkedScheduler()
- else:
- log.debug("Using Sequential scheduler")
- si = scheduler.Sceduler()
-
- _scheduler_instance = si
- return si
-
-def add_interval_task(action, interval, args=None, kw=None, initialdelay=0,
- processmethod=method.threaded, taskname=None):
- si = _get_scheduler()
- return si.add_interval_task(action=action, interval=interval, args=args,
- kw=kw, initialdelay=initialdelay, processmethod=processmethod,
- taskname=taskname)
-
-def add_single_task(action, args=None, kw=None, initialdelay=0,
- processmethod=method.threaded, taskname=None):
- si = _get_scheduler()
- return si.add_single_task(action=action, args=args, kw=kw,
- initialdelay=initialdelay, processmethod=processmethod,
- taskname=taskname)
-
-def add_weekday_task(action, weekdays, timeonday, args=None, kw=None,
- processmethod=method.threaded, taskname=None):
- si = _get_scheduler()
- return si.add_daytime_task(action=action, taskname=taskname,
- weekdays=weekdays, monthdays=None, timeonday=timeonday,
- processmethod=processmethod, args=args, kw=kw)
-
-def add_monthday_task(action, monthdays, timeonday, args=None, kw=None,
- processmethod=method.threaded, taskname=None):
- si = _get_scheduler()
- return si.add_daytime_task(action=action, taskname=taskname,
- weekdays=None, monthdays=monthdays, timeonday=timeonday,
- processmethod=processmethod, args=args, kw=kw)
-
-def cancel(task):
- si = _get_scheduler()
- si.cancel(task)
+from scheduler import scheduler, start_scheduler, stop_scheduler, \
+ add_interval_task, add_monthly_task, add_single_task, \
+ add_weekday_task