【问题标题】:Cannot get django celeryd to work on Windows无法让 django celeryd 在 Windows 上工作
【发布时间】:2012-03-04 10:24:36
【问题描述】:

我有一个 django 项目,运行良好,runserver 位于:

D:\EverTabs\work\evertabs-website\src\evertabs\

我的 settings.py 和 manage.py 位于上述路径中。

我打开可信赖的 cmd shell,cd 到该目录并运行 manage.py celeryd,我得到一个异常并出现以下错误:

ImportError: Could not import settings 'evertabs.settings' (Is it on sys.path?): No module named evertabs.settings

公平,够了。谷歌和 StackOverflow 进行救援,我找到了答案。我需要为命令提供--settings=settings。奇怪,因为 runserver 不需要--settings=settings,但这就是生活。我愿意妥协。我继续收到错误:

Traceback (most recent call last):
  File "C:\Progra~1\Python26\lib\multiprocessing\process.py", line 231, in _bootstrap
    self.run()
  File "C:\Progra~1\Python26\lib\multiprocessing\process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\concurrency\processes\pool.py", line 173, in worker
    initializer(*initargs)
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\worker\__init__.py", line 64, in process_initializer
    app.loader.init_worker()
  File "c:\program files\python26\lib\site-packages\celery-2.4.6-py2.6.egg\celery\loaders\base.py", line 100, in init_worker
    self.on_worker_init()
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 92, in on_worker_init
    autodiscover()
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 114, in autodiscover
    for app in settings.INSTALLED_APPS])
  File "c:\program files\python26\lib\site-packages\django_celery-2.4.2-py2.6.egg\djcelery\loaders.py", line 124, in find_related_module
    app_path = importlib.import_module(app).__path__
  File "build\bdist.win32\egg\importlib\__init__.py", line 37, in import_module
ImportError: No module named evertabs

所以我用力地挠了挠头,并决定如果我给这个家伙提供一个不同的 pythonpath,他会很好地放置。我的下一个尝试是:

manage.py celeryd --pythonpath=D:\EverTabs\work\evertabs-website\src\

现在我们正在取得进展!没有错误。但是,与 settings.py 位于同一目录中的 celeryconfig.py 没有得到处理。我的任务都没有加载。我什至将语法错误放入 celeryconfg.py 以向自己证明它没有被加载。

我做的下一步是使用 django 1.4 中的 manage.py。此 manage.py 位于 D:\EverTabs\work\evertabs-website\src\ 中,而不是 D:\EverTabs\work\evertabs-website\src\evertabs\。此时,我可以用简单的语法执行 celeryd,而不必添加到 pythonpath 中。尽管如此,我的 celeryconfig.py 仍然保持不变:

D:\EverTabs\work\evertabs-website\src>manage.py celeryd

进一步的研究表明,如果我将 tasks.py 添加到我的顶级目录 9 中 setting.py 所在的位置)。 Celery 会自动发现它们。这已经奏效了。但是,celeryconfig.py 仍然没有被处理,所以我不能在那里做更复杂的配置。目前,这不是问题,因为我的任务终于找到了。然而,celeryconfig.py 没有被处理,这让我很困扰。

我现在明白了,也许现代 celery 根本就不是在寻找 celeryconfig.py。我可以简单地将这些设置放在我的 settings.py 中,celery 会选择它们。情况开始看起来不错。

【问题讨论】:

    标签: django celery django-celery celeryd


    【解决方案1】:

    django-celery 使用 settings.py 作为 celery 配置文件。

    另一个主要区别是配置值存储在 你的 Django 项目的 settings.py 模块,而不是在 celeryconfig.py.

    http://ask.github.com/django-celery/introduction.html

    【讨论】:

    • 是的,在配置之前阅读整个文档会很有帮助。但是,教程的开头说设置 django-celery 比听起来容易得多,所以我选择了营销信息。
    【解决方案2】:

    我为使 celery 工作所做的事情的简短摘要:

    1. 使用--pythonpath 指向您的项目目录上方的目录,以便 celery 可以导入 project.settings 或将您的 manage.py 上移一级并使用 django 1.4 生成的 manage.py。

    2. 在项目的顶层(settings.py 所在的位置)创建一个 tasks.py,celery 会自动发现它们。如果您想使用其他模块,请将 CELERY_IMPORTS = ("yourproject.anothermodule", ) 添加到您的 settings.py 中,以便 celery 将在 anothermodule 内部查找任务。

    3. 忘记一些文档中提到的celeryconfig.py。只需将所有设置正确放入您的settings.py

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      相关资源
      最近更新 更多