|
@@ -1,3 +1,4 @@
|
|
|
+import os
|
|
|
from celery.loaders.djangoapp import Loader as DjangoLoader
|
|
|
from celery.loaders.default import Loader as DefaultLoader
|
|
|
from django.conf import settings
|
|
@@ -13,12 +14,18 @@ Loader = DefaultLoader
|
|
|
if settings.configured:
|
|
|
Loader = DjangoLoader
|
|
|
else:
|
|
|
- # We might still be running celery with django, because worker processes
|
|
|
- # spawned with celery running through manage.py, will not have had their
|
|
|
- # django environment set up
|
|
|
+ if callable(getattr(os, "fork", None)): # Platform doesn't support fork()
|
|
|
+ # XXX On systems without fork, multiprocessing seems to be launching
|
|
|
+ # the processes in some other way which does not copy the memory
|
|
|
+ # of the parent process. This means that any configured env might
|
|
|
+ # be lost. This is a hack to make it work on Windows.
|
|
|
+ # A better way might be to use os.environ to set the currently
|
|
|
+ # used configuration method so to propogate it to the "child"
|
|
|
+ # processes. But this has to be experimented with.
|
|
|
+ # [asksol/heyman]
|
|
|
try:
|
|
|
- # If we can import 'settings', assume we're running celery with django
|
|
|
- import settings as project_settings
|
|
|
+ settings_mod = os.environ.get("DJANGO_SETTINGS_MODULE", "settings")
|
|
|
+ project_settings = __import__(settings_mod, {}, {}, [''])
|
|
|
setup_environ(project_settings)
|
|
|
Loader = DjangoLoader
|
|
|
except ImportError:
|