diff options
author | niemeyer <> | 2004-03-10 20:47:20 +0000 |
---|---|---|
committer | niemeyer <> | 2004-03-10 20:47:20 +0000 |
commit | 5e234cf3652c39355d352cde1db4d76156b05a01 (patch) | |
tree | 189b0d4ce3615a40122cf88fcca14162b0c49816 | |
parent | 771256037e94f76d6b749837e4af26f43d304efc (diff) | |
download | dateutil-5e234cf3652c39355d352cde1db4d76156b05a01.tar.gz |
Removing scheduler.py.
-rw-r--r-- | dateutil/scheduler.py | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/dateutil/scheduler.py b/dateutil/scheduler.py deleted file mode 100644 index 681f442..0000000 --- a/dateutil/scheduler.py +++ /dev/null @@ -1,157 +0,0 @@ -""" -Copyright (c) 2003 Gustavo Niemeyer <niemeyer@conectiva.com> - -This module offers extensions to the standard python 2.3+ -datetime module. -""" -__author__ = "Gustavo Niemeyer <niemeyer@conectiva.com>" -__license__ = "PSF License" - -import datetime -import thread -import signal -import time - -class sched: - - def __init__(self, rrule, - tolerance=None, last=None, - execute=None, args=None, kwargs=None): - self._rrule = rrule - if tolerance: - self._tolerance = datetime.timedelta(seconds=tolerance) - else: - self._tolerance = None - self._last = last - self._execute = execute - self._args = args or () - self._kwargs = kwargs or {} - - def last(self): - return self._last - - def next(self, now=None): - if not now: - now = datetime.datetime.now() - return self._rrule.after(now) - - def check(self, now=None, readonly=False): - if not now: - now = datetime.datetime.now() - item = self._rrule.before(now, inc=True) - if (item is None or item == self._last or - (self._tolerance and item+self._tolerance < now)): - return None - if not readonly: - self._last = item - if self._execute: - self._execute(*self._args, **self._kwargs) - return item - - -class schedset: - def __init__(self): - self._scheds = [] - - def add(self, sched): - self._scheds.append(sched) - - def next(self, now=None): - if not now: - now = datetime.datetime.now() - res = None - for sched in self._scheds: - next = sched.next(now) - if next and (not res or next < res): - res = next - return res - - def check(self, now=None, readonly=False): - if not now: - now = datetime.datetime.now() - res = False - for sched in self._scheds: - if sched.check(now, readonly): - res = True - return res - - -class schedthread: - - def __init__(self, sched, lock=None): - self._sched = sched - self._lock = lock - self._running = False - - def running(self): - return self._running - - def run(self): - self._running = True - thread.start_new_thread(self._loop, ()) - - def stop(self): - self._running = False - - def _loop(self): - while self._running: - if self._lock: - self._lock.acquire() - now = datetime.datetime.now() - self._sched.check(now) - if self._lock: - self._lock.release() - seconds = _seconds_left(self._sched.next(now)) - if seconds is None: - self._running = False - break - if self._running: - time.sleep(seconds) - - -class schedalarm: - - def __init__(self, sched, lock=None): - self._sched = sched - self._lock = lock - self._running = False - - def running(self): - return self._running - - def run(self): - self._running = True - signal.signal(signal.SIGALRM, self._handler) - self._handler(None, None) - - def stop(self): - self._running = False - - def _handler(self, sig, frame): - while self._running: - if self._lock: - self._lock.acquire() - now = datetime.datetime.now() - self._sched.check(now) - if self._lock: - self._lock.release() - if self._running: - seconds = _seconds_left(self._sched.next(now)) - if seconds: - signal.alarm(seconds) - break - elif seconds is None: - self._running = False - break - - -def _seconds_left(next): - if not next: - return None - now = datetime.datetime.now() - delta = next-now - seconds = delta.days*86400+delta.seconds - if seconds < 0: - seconds = 0 - return seconds - |