Ver código fonte

can now override PeriodicTask.is_due to decide the interval at runtime!

Ask Solem 15 anos atrás
pai
commit
ed02756bd1
2 arquivos alterados com 11 adições e 4 exclusões
  1. 3 3
      celery/beat.py
  2. 8 1
      celery/task/base.py

+ 3 - 3
celery/beat.py

@@ -35,8 +35,8 @@ class ScheduleEntry(object):
         return self.__class__(self.name, datetime.now(),
                               self.total_run_count + 1)
 
-    def is_due(self, run_every):
-        return datetime.now() > (self.last_run_at + run_every)
+    def is_due(self, task):
+        return task.is_due(self.last_run_at)
 
 
 class Scheduler(UserDict):
@@ -91,7 +91,7 @@ class Scheduler(UserDict):
             raise NotRegistered(name)
 
     def is_due(self, entry):
-        return entry.is_due(self.get_task(entry.name).run_every)
+        return entry.is_due(self.get_task(entry.name))
 
     def apply_async(self, entry):
 

+ 8 - 1
celery/task/base.py

@@ -1,5 +1,5 @@
 import sys
-from datetime import timedelta
+from datetime import datetime, timedelta
 from Queue import Queue
 
 from carrot.connection import DjangoBrokerConnection
@@ -584,3 +584,10 @@ class PeriodicTask(Task):
             self.__class__.run_every = timedelta(seconds=self.run_every)
 
         super(PeriodicTask, self).__init__()
+
+    def is_due(self, last_run_at):
+        """Returns ``True`` if the task is due.
+
+        You can override this to decide the interval at runtime.
+        """
+        return datetime.now() > (last_run_at + self.run_every)