managers.py 599 B

1234567891011121314151617
  1. from django.db import models
  2. from celery.registry import tasks
  3. from datetime import datetime, timedelta
  4. class PeriodicTaskManager(models.Manager):
  5. def get_waiting_tasks(self):
  6. periodic_tasks = tasks.get_all_periodic()
  7. waiting = []
  8. for task_name, task in periodic_tasks.items():
  9. task_meta, created = self.get_or_create(name=task_name)
  10. # task_run.every must be a timedelta object.
  11. run_at = task_meta.last_run_at + task.run_every
  12. if datetime.now() > run_at:
  13. waiting.append(task_meta)
  14. return waiting