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

New settings variable: CELERY_TASK_RESULT_EXPIRES:
Time (in seconds, or a :class:`datetime.timedelta` object) for when after
stored task results are deleted. For the moment this only works for the
database backend.

Ask Solem преди 15 години
родител
ревизия
3cdbddfc98
променени са 2 файла, в които са добавени 18 реда и са изтрити 2 реда
  1. 16 0
      celery/conf.py
  2. 2 2
      celery/managers.py

+ 16 - 0
celery/conf.py

@@ -1,5 +1,6 @@
 """celery.conf"""
 from django.conf import settings
+from datetime import timedelta
 import logging
 
 DEFAULT_AMQP_EXCHANGE = "celery"
@@ -16,6 +17,7 @@ DEFAULT_AMQP_CONNECTION_TIMEOUT = 4
 DEFAULT_STATISTICS = False
 DEFAULT_STATISTICS_COLLECT_INTERVAL = 60 * 5
 DEFAULT_ALWAYS_EAGER = False
+DEFAULT_TASK_RESULT_EXPIRES = timedelta(days=5)
 
 """
 .. data:: LOG_LEVELS
@@ -177,3 +179,17 @@ STATISTICS_COLLECT_INTERVAL = getattr(settings,
 """
 ALWAYS_EAGER = getattr(settings, "CELERY_ALWAYS_EAGER",
                        DEFAULT_ALWAYS_EAGER)
+
+"""
+.. data: TASK_RESULT_EXPIRES
+
+    Time (in seconds, or a :class:`datetime.timedelta` object) for when after
+    stored task results are deleted. For the moment this only works for the
+    database backend.
+"""
+TASK_RESULT_EXPIRES = getattr(settings, "CELERY_TASK_RESULT_EXPIRES",
+                              DEFAULT_TASK_RESULT_EXPIRES)
+
+# Make sure TASK_RESULT_EXPIRES is a timedelta.
+if isinstance(TASK_RESULT_EXPIRES, int):
+    TASK_RESULT_EXPIRES = timedelta(seconds=TASK_RESULT_EXPIRES)

+ 2 - 2
celery/managers.py

@@ -2,6 +2,7 @@
 from django.db import models
 from django.db import connection
 from celery.registry import tasks
+from celery.conf import TASK_RESULT_EXPIRES
 from datetime import datetime, timedelta
 from django.conf import settings
 import random
@@ -25,8 +26,7 @@ class TaskManager(models.Manager):
 
     def get_all_expired(self):
         """Get all expired task results."""
-        # TODO Make the timedelta configurable
-        return self.filter(date_done__lt=datetime.now() - timedelta(days=5))
+        return self.filter(date_done__lt=datetime.now() - TASK_RESULT_EXPIRES)
 
     def delete_expired(self):
         """Delete all expired task results."""