Quellcode durchsuchen

Pool result handler doesn't like exceptions at all, so wrap in ExceptionInfo.

Ask Solem vor 15 Jahren
Ursprung
Commit
58b688e4f1
1 geänderte Dateien mit 6 neuen und 2 gelöschten Zeilen
  1. 6 2
      celery/execute.py

+ 6 - 2
celery/execute.py

@@ -14,8 +14,9 @@ from celery.loaders import current_loader
 from celery.monitoring import TaskTimerStats
 from celery.monitoring import TaskTimerStats
 from celery import signals
 from celery import signals
 import sys
 import sys
-import traceback
 import inspect
 import inspect
+import warnings
+import traceback
 
 
 
 
 def apply_async(task, args=None, kwargs=None, countdown=None, eta=None,
 def apply_async(task, args=None, kwargs=None, countdown=None, eta=None,
@@ -228,8 +229,11 @@ class ExecuteWrapper(object):
         try:
         try:
             return self.execute(*args, **kwargs)
             return self.execute(*args, **kwargs)
         except Exception, exc:
         except Exception, exc:
+            type_, value_, tb = sys.exc_info()
             exc = default_backend.prepare_exception(exc)
             exc = default_backend.prepare_exception(exc)
-            raise exc
+            warnings.warn("Exception happend outside of task body: %s: %s" % (
+                str(exc.__class__), str(exc)))
+            return ExceptionInfo((type_, exc, tb))
 
 
     def execute(self):
     def execute(self):
         # Convenience variables
         # Convenience variables