Browse Source

Make servers drift apart in time for running periodic tasks with the database backend.

Ask Solem 16 years ago
parent
commit
3fe8bce72e
1 changed files with 4 additions and 0 deletions
  1. 4 0
      celery/managers.py

+ 4 - 0
celery/managers.py

@@ -46,6 +46,9 @@ class TaskManager(models.Manager):
             task.result = result
             task.save()
 
+# server_drift can be negative, but timedelta supports addition on
+#negative seconds.
+server_drift = timedelta(seconds=random.vonmisesvariate(1, 10))
 
 class PeriodicTaskManager(models.Manager):
     """Manager for :class:`celery.models.PeriodicTask` models."""
@@ -60,6 +63,7 @@ class PeriodicTaskManager(models.Manager):
         for task_name, task in periodic_tasks.items():
             task_meta, created = self.get_or_create(name=task_name)
             # task_run.every must be a timedelta object.
+            run_every_drifted = task.run_every + server_drift
             run_at = task_meta.last_run_at + task.run_every
             if datetime.now() > run_at:
                 waiting.append(task_meta)