فهرست منبع

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

Ask Solem 16 سال پیش
والد
کامیت
3fe8bce72e
1فایلهای تغییر یافته به همراه4 افزوده شده و 0 حذف شده
  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)