浏览代码

Worker didn't actually set the default app, breaking gevent/eventlet

Ask Solem 12 年之前
父节点
当前提交
e1f81cf416
共有 3 个文件被更改,包括 8 次插入11 次删除
  1. 6 4
      celery/_state.py
  2. 0 5
      celery/app/__init__.py
  3. 2 2
      celery/bin/base.py

+ 6 - 4
celery/_state.py

@@ -36,14 +36,16 @@ _task_stack = LocalStack()
 
 def set_default_app(app):
     global default_app
-    if default_app is None:
-        default_app = app
+    default_app = app
 
 
 def get_current_app():
     if default_app is None:
-        # creates the default app, but we want to defer that.
-        import celery.app  # noqa
+        #: creates the global fallback app instance.
+        from celery.app import Celery, default_loader
+        set_default_app(Celery('default', loader=default_loader,
+                                          set_as_current=False,
+                                          accept_magic_kwargs=True))
     return _tls.current_app or default_app
 
 

+ 0 - 5
celery/app/__init__.py

@@ -37,11 +37,6 @@ app_or_default = None
 #: The 'default' loader is the default loader used by old applications.
 default_loader = os.environ.get('CELERY_LOADER') or 'default'
 
-#: Global fallback app instance.
-set_default_app(Celery('default', loader=default_loader,
-                                  set_as_current=False,
-                                  accept_magic_kwargs=True))
-
 
 def bugreport():
     return current_app().bugreport()

+ 2 - 2
celery/bin/base.py

@@ -366,8 +366,8 @@ class Command(object):
         pass
 
     def _get_default_app(self, *args, **kwargs):
-        from celery.app import default_app
-        return default_app._get_current_object()  # omit proxy
+        from celery._state import get_current_app
+        return get_current_app()  # omit proxy
 
 
 def daemon_options(default_pidfile=None, default_logfile=None):