فهرست منبع

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."""