Browse Source

State.clear: only remove tasks with a ready state.

Ask Solem 14 years ago
parent
commit
3e148cb40d
1 changed files with 10 additions and 2 deletions
  1. 10 2
      celery/events/state.py

+ 10 - 2
celery/events/state.py

@@ -191,10 +191,18 @@ class State(object):
                                "task": self.task_event}
         self._resource = RLock()
 
-    def clear(self):
+    def clear_tasks(self, ready=True):
+        if ready:
+            self.tasks = dict((uuid, task)
+                                for uuid, task in self.tasks.items()
+                                    if task.state not in states.READY_STATES)
+        else:
+            self.tasks.clear()
+
+    def clear(self, ready=True):
         try:
             self.workers.clear()
-            self.tasks.clear()
+            self.clear_tasks(ready)
             self.event_count = 0
             self.task_count = 0
         finally: