Browse Source

AsyncResult.forget: Need to remove task from BaseDictBackend cache, so backends should now define the _forget method to override how the key is deleted.

Ask Solem 14 năm trước cách đây
mục cha
commit
e48b4f9c33
2 tập tin đã thay đổi với 6 bổ sung2 xóa
  1. 5 1
      celery/backends/base.py
  2. 1 1
      celery/backends/database.py

+ 5 - 1
celery/backends/base.py

@@ -155,6 +155,10 @@ class BaseDictBackend(BaseBackend):
         result = self.encode_result(result, status)
         return self._store_result(task_id, result, status, traceback)
 
+    def forget(self, task_id):
+        self._cache.pop(task_id, None)
+        self._forget(task_id)
+
     def get_status(self, task_id):
         """Get the status of a task."""
         return self.get_task_meta(task_id)["status"]
@@ -226,7 +230,7 @@ class KeyValueStoreBackend(BaseDictBackend):
         """Get the cache key for a task by id."""
         return "celery-taskset-meta-%s" % task_id
 
-    def forget(self, task_id):
+    def _forget(self, task_id):
         self.delete(task_id)
 
     def _store_result(self, task_id, result, status, traceback=None):

+ 1 - 1
celery/backends/database.py

@@ -87,7 +87,7 @@ class DatabaseBackend(BaseDictBackend):
         finally:
             session.close()
 
-    def forget(self, task_id):
+    def _forget(self, task_id):
         """Forget about result."""
         session = self.ResultSession()
         expires = self.result_expires