def next_scheduled(self, jobnames=None): if not self.schedule_periodic: return if jobnames: entries = (self._entries.get(name, None) for name in jobnames) else: entries = itervalues(self._entries) next_entry = None next_time = None for entry in entries: if entry is None: continue is_due, next_time_to_run = entry.is_due() if is_due: next_time = 0 next_entry = entry break elif next_time_to_run is not None: if next_time is None or next_time_to_run < next_time: next_time = next_time_to_run next_entry = entry if next_entry: return (next_entry.name, max(next_time, 0)) else: return (jobnames, None)
def get_tasks(cls, scheduler, **filters): TASKS = cls.task_container(scheduler) tasks = [] if filters: fs = [] for name, value in iteritems(filters): if not isinstance(value, (list, tuple)): value = (value,) fs.append((name, value)) for t in itervalues(TASKS): for name, values in fs: value = getattr(t, name, None) if value in values: tasks.append(t) return tasks
def tick(self, monitor, now=None): '''Run a tick, that is one iteration of the scheduler. Executes all due tasks calculate the time in seconds to wait before running a new :meth:`tick`. For testing purposes a :class:`datetime.datetime` value ``now`` can be passed.''' remaining_times = [] try: for entry in itervalues(self._entries): is_due, next_time_to_run = entry.is_due(now=now) if is_due: self.queue_task(monitor, entry.name) if next_time_to_run: remaining_times.append(next_time_to_run) except: self.logger.error('Error in task scheduler', exc_info=True) self.next_run = now or datetime.now() if remaining_times: self.next_run += timedelta(seconds = min(remaining_times))
def home(self, environ): data = '<ul>\n%s\n</ul>' % '\n'.join( (r.route.render() for r in itervalues(self.routes))) return self.render(data)