Переглянути джерело

Store FAILURE result if we get WorkerLostError (worker process disapeared)

Ask Solem 14 роки тому
батько
коміт
d4b3e581a1
1 змінених файлів з 7 додано та 0 видалено
  1. 7 0
      celery/worker/job.py

+ 7 - 0
celery/worker/job.py

@@ -8,6 +8,7 @@ from datetime import datetime
 
 from celery import platform
 from celery.app import app_or_default
+from celery.concurrency.processes.pool import WorkerLostError
 from celery.datastructures import ExceptionInfo
 from celery.exceptions import SoftTimeLimitExceeded, TimeLimitExceeded
 from celery.execute.trace import TaskTrace
@@ -435,6 +436,12 @@ class TaskRequest(object):
                                        exception=repr(exc_info.exception),
                                        traceback=exc_info.traceback)
 
+        # This is a special case as the process would not have had
+        # time to write the result.
+        if isinstance(exc_info.exception, WorkerLostError):
+            self.task.backend.mark_as_failure(self.task_id,
+                                              exc_info.exception)
+
         context = {"hostname": self.hostname,
                    "id": self.task_id,
                    "name": self.task_name,