Ejemplo n.º 1
0
 def run_at(self):
     run_at = self._run_at or datetime_now()
     if isinstance(run_at, int):
         run_at = datetime_now() + timedelta(seconds=run_at)
     if isinstance(run_at, timedelta):
         run_at = datetime_now() + run_at
     return run_at
Ejemplo n.º 2
0
 def run_at(self):
     run_at = self._run_at or datetime_now()
     if isinstance(run_at, int):
         run_at = datetime_now() + timedelta(seconds=run_at)
     if isinstance(run_at, timedelta):
         run_at = datetime_now() + run_at
     return run_at
Ejemplo n.º 3
0
    def schedule(self, task_name, args, kwargs, run_at=None,
                       priority=0, action=TaskSchedule.SCHEDULE):
        '''Simply create a task object in the database'''

        task = Task.objects.new_task(task_name, args, kwargs,
                                     run_at, priority)

        if action != TaskSchedule.SCHEDULE:
            task_hash = task.task_hash
            unlocked = Task.objects.unlocked(datetime_now())
            existing = unlocked.filter(task_hash=task_hash)
            if action == TaskSchedule.RESCHEDULE_EXISTING:
                updated = existing.update(run_at=run_at, priority=priority)
                if updated:
                    return
            elif action == TaskSchedule.CHECK_EXISTING:
                if existing.count():
                    return

        task.save()
Ejemplo n.º 4
0
    def schedule(self, task_name, args, kwargs, run_at=None,
                       priority=0, action=TaskSchedule.SCHEDULE):
        '''Simply create a task object in the database'''

        task = Task.objects.new_task(task_name, args, kwargs,
                                     run_at, priority)

        if action != TaskSchedule.SCHEDULE:
            task_hash = task.task_hash
            unlocked = Task.objects.unlocked(datetime_now())
            existing = unlocked.filter(task_hash=task_hash)
            if action == TaskSchedule.RESCHEDULE_EXISTING:
                updated = existing.update(run_at=run_at, priority=priority)
                if updated:
                    return
            elif action == TaskSchedule.CHECK_EXISTING:
                if existing.count():
                    return

        task.save()
Ejemplo n.º 5
0
 def run_task(self, tasks, task):
     try:
         logging.info('Running %s', task)
         args, kwargs = task.params()
         tasks.run_task(task.task_name, args, kwargs)
         # task done, so can delete it
         completed = CompletedTask(task_name=task.task_name,
                                   task_params=task.task_params,
                                   task_hash=task.task_hash,
                                   priority=task.priority,
                                   run_at=datetime_now(),
                                   attempts=task.attempts,
                                   failed_at=task.failed_at,
                                   last_error=task.last_error,
                                   locked_by=task.locked_by,
                                   locked_at=task.locked_at)
         completed.save()
         task.delete()
         logging.info('Ran task and deleting %s', task)
     except Exception:
         t, e, traceback = sys.exc_info()
         logging.warn('Rescheduling %s', task, exc_info=(t, e, traceback))
         task.reschedule(t, e, traceback)
         del traceback