Browse Source

Adds celery.current_app

Ask Solem 14 years ago
parent
commit
c595b6a689
3 changed files with 13 additions and 4 deletions
  1. 7 2
      celery/__init__.py
  2. 4 0
      celery/app/__init__.py
  3. 2 2
      celery/worker/job.py

+ 7 - 2
celery/__init__.py

@@ -11,9 +11,14 @@ __docformat__ = "restructuredtext"
 
 
 def Celery(*args, **kwargs):
-    from celery import app
-    return app.App(*args, **kwargs)
+    from celery.app import App
+    return App(*args, **kwargs)
 
 
 def CompatCelery(*args, **kwargs):
     return Celery(loader=os.environ.get("CELERY_LOADER", "default"))
+
+
+def current_app():
+    from celery.app import current_app
+    return current_app()

+ 4 - 0
celery/app/__init__.py

@@ -164,6 +164,10 @@ default_loader = os.environ.get("CELERY_LOADER") or "default"
 default_app = App(loader=default_loader, set_as_current=False)
 
 
+def current_app():
+    return getattr(_tls, "current_app", None) or default_app
+
+
 def _app_or_default(app=None):
     """Returns the app provided or the default app if none.
 

+ 2 - 2
celery/worker/job.py

@@ -8,7 +8,7 @@ import warnings
 from datetime import datetime
 
 from celery import platforms
-from celery.app import app_or_default
+from celery.app import app_or_default, current_app
 from celery.datastructures import ExceptionInfo
 from celery.exceptions import SoftTimeLimitExceeded, TimeLimitExceeded
 from celery.exceptions import WorkerLostError, RetryTaskError
@@ -89,7 +89,7 @@ class WorkerTaskTrace(TaskTrace):
     hostname = None
 
     def __init__(self, *args, **kwargs):
-        self.loader = kwargs.get("loader") or app_or_default().loader
+        self.loader = kwargs.get("loader") or current_app().loader
         self.hostname = kwargs.get("hostname") or socket.gethostname()
         super(WorkerTaskTrace, self).__init__(*args, **kwargs)