Browse Source

(#GH-41) Remember previous loader by keeping it in the CELERY_LOADER environment
variable, this may help on windows and multiprocessings fork emulation.

Ask Solem 15 years ago
parent
commit
906a5c3917
2 changed files with 11 additions and 3 deletions
  1. 10 2
      celery/loaders/__init__.py
  2. 1 1
      celery/tests/test_loaders.py

+ 10 - 2
celery/loaders/__init__.py

@@ -1,6 +1,7 @@
 import os
 import importlib
 
+from celery.utils import get_full_cls_name
 from celery.loaders.default import Loader as DefaultLoader
 from celery.loaders.djangoapp import Loader as DjangoLoader
 
@@ -27,11 +28,18 @@ def get_loader_cls(loader):
     return _loader_cache[loader]
 
 
-def _detect_loader(): # pragma: no cover
+def detect_loader():
     loader = os.environ.get("CELERY_LOADER")
     if loader:
         return get_loader_cls(loader)
 
+    loader = _detect_loader()
+    os.environ["CELERY_LOADER"] = get_full_cls_name(loader)
+
+    return loader
+
+
+def _detect_loader(): # pragma: no cover
     from django.conf import settings
     if settings.configured:
         return DjangoLoader
@@ -72,7 +80,7 @@ def _detect_loader(): # pragma: no cover
 The current loader class.
 
 """
-Loader = _detect_loader()
+Loader = detect_loader()
 
 """
 .. data:: current_loader

+ 1 - 1
celery/tests/test_loaders.py

@@ -27,7 +27,7 @@ class TestLoaders(unittest.TestCase):
 
     @with_environ("CELERY_LOADER", "default")
     def test_detect_loader_CELERY_LOADER(self):
-        self.assertEquals(loaders._detect_loader(), loaders.DefaultLoader)
+        self.assertEquals(loaders.detect_loader(), loaders.DefaultLoader)
 
 
 class DummyLoader(base.BaseLoader):