managers.py 561 B

12345678910111213141516
  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. run_at = task_meta.last_run_at + timedelta(seconds=task.run_every)
  11. if datetime.now() > run_at:
  12. waiting.append(task_meta)
  13. return waiting