Преглед на файлове

Refactored the periodic task responsible for cleaning up results.

* The backend cleanup task is now only added to the schedule if
    CELERY_TASK_RESULT_EXPIRES is set.

* If the schedule already contains a periodic task named
  "celery.backend_cleanup" it won't change it, so the behavior of the
  backend cleanup task can be easily changed.

* The task is now run by every day at 4:00 AM, instead of every day since
  fist run (using crontab schedule instead of run_every)

* Renamed celery.task.builtins.DeleteExpiredTaskMetaTask -> .backend_cleanup

* The task itself has been renamed from "celery.delete_expired_task_meta"
  to "celery.backend_cleanup"

Closes #134. Thanks to jonozzz.
Ask Solem преди 14 години
родител
ревизия
452981ff5d
променени са 1 файла, в които са добавени 13 реда и са изтрити 12 реда
  1. 13 12
      celery/task/builtins.py

+ 13 - 12
celery/task/builtins.py

@@ -1,25 +1,26 @@
 from datetime import timedelta
 
+from celery import conf
+from celery.schedules import crontab
 from celery.serialization import pickle
 from celery.task.base import Task, PeriodicTask
 from celery.task.sets import TaskSet
 
 
-class DeleteExpiredTaskMetaTask(PeriodicTask):
-    """A periodic task that deletes expired task metadata every day.
+class backend_cleanup(Task):
+    name = "celery.backend_cleanup"
 
-    This runs the current backend's
-    :meth:`celery.backends.base.BaseBackend.cleanup` method.
+    def run(self):
+        self.backend.cleanup()
 
-    """
-    name = "celery.delete_expired_task_meta"
-    run_every = timedelta(days=1)
+if conf.TASK_RESULT_EXPIRES and \
+        backend_cleanup.name not in conf.CELERYBEAT_SCHEDULE:
+    conf.CELERYBEAT_SCHEDULE[backend_cleanup.name] = dict(
+            task=backend_cleanup.name,
+            schedule=crontab(minute="00", hour="04", day_of_week="*"))
 
-    def run(self, **kwargs):
-        """:returns: None"""
-        logger = self.get_logger(**kwargs)
-        logger.info("Deleting expired task results...")
-        self.backend.cleanup()
+
+DeleteExpiredTaskMetaTask = backend_cleanup         # FIXME remove in 3.0
 
 
 class PingTask(Task):