mli*_*ner 5 django virtualenv celery django-celery celeryd
据我所知,有两个文档描述了如何设置 celery。其中有“将工作线程作为守护进程运行”和“使用Django 的第一步”。
\n\n在 Django 文档中,它说:
\n\n\n\n\n我们还添加 Django 设置模块作为 Celery 的配置源。这意味着您不必使用多个配置文件,而是直接从 Django 设置配置 Celery。
\n
听起来棒极了。然而,据我所知,这些是完整的 Celery 守护进程所需的文件:
\n\n/etc/init.d/celeryd
/etc/defaults/celery
/my-proj/celery.py
/my-proj/__init__.py
并且可能:
\n\n/my-proj/settings.py
天哪,文件太多了。我想我已经正确设置了它们:
\n\n/etc/init.d/celeryd
有celery 提供的默认 init.d 脚本。/etc/defaults/celery
几乎什么都没有。只是指向我的应用程序的指针:
export DJANGO_SETTINGS_MODULE=\'cl.settings\'\n
Run Code Online (Sandbox Code Playgroud)/my-proj/celery.py
有Django 的第一步中推荐的文件:
from __future__ import absolute_import\n\nimport os\n\nfrom celery import Celery\n\n# set the default Django settings module for the \'celery\' program.\nos.environ.setdefault(\'DJANGO_SETTINGS_MODULE\', \'proj.settings\')\n\nfrom django.conf import settings # noqa\n\napp = Celery(\'proj\')\n\n# Using a string here means the worker will not have to\n# pickle the object when using Windows.\napp.config_from_object(\'django.conf:settings\')\napp.autodiscover_tasks(lambda: settings.INSTALLED_APPS)\n
Run Code Online (Sandbox Code Playgroud)/my-proj/__init__.py
有Django 的第一步中的推荐代码:
from __future__ import absolute_import\n\n# This will make sure the app is always imported when\n# Django starts so that shared_task will use this app.\nfrom .celery import app as celery_app\n
Run Code Online (Sandbox Code Playgroud)我的文件中有所有与芹菜相关的设置,如下所示settings.py
:
CELERY_BIN = \'/var/www/.virtualenvs/my-env/bin/celery\'\nCELERYD_USER = \'www-data\'\nCELERYD_GROUP = \'www-data\'\nCELERYD_CONCURRENCY = 20\nBROKER_URL = \'redis://\'\nBROKER_POOL_LIMIT = 30\n
Run Code Online (Sandbox Code Playgroud)\n\n然而,当我开始使用 celery 时sudo service celeryd start
,它不起作用。相反,很明显它没有从我的 Django 项目中获取我的设置,因为它说:
Nov 05 20:51:59 pounamu celeryd[30190]: celery init v10.1.\nNov 05 20:51:59 pounamu celeryd[30190]: Using config script: /etc/default/celeryd\nNov 05 20:51:59 pounamu celeryd[30190]: No passwd entry for user \'celery\'\nNov 05 20:51:59 pounamu su[30206]: No passwd entry for user \'celery\'\nNov 05 20:51:59 pounamu su[30206]: FAILED su for celery by root\nNov 05 20:51:59 pounamu su[30206]: - ??? root:celery\nNov 05 20:51:59 pounamu systemd[1]: celeryd.service: control process exited, code=exited status=1\n
Run Code Online (Sandbox Code Playgroud)\n\n有什么想法是保水线不起作用吗?我错过了一些重要的事情吗?
\ntuo*_*mur -1
你缺少CELERY_APP
设置。将其设置在配置文件 /etc/defaults/celery
中或作为worker命令的参数:
celery worker -A my-proj
Run Code Online (Sandbox Code Playgroud)
否则,Celery 不知道它应该看什么/my-proj/celery.py
。django 环境变量不会影响 Celery 加载的内容。