django - 具有多个 django 站点的 celery

标签 django redis celery

我有几个客户站点的一个 django 后端:

my_proj
    |- my_proj
        |- __init__.py
        |- settings.py
        |- settings_development.py
        |- settings_production_1.py
        |- settings_production_2.py
        |- settings_production_3.py
    |- my_app_1
    |- my_app_2
    ...

settings_production_1.py:

from settings import *

DEBUG = False
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'customer_1_db',
        'USER': 'some_user',
        'PASSWORD': 'some_passw',
        'HOST': '127.0.0.1',
        'PORT': '',
    }
}
MEDIA_ROOT = 'media/customer_1'

每个站点都是一个由 supervisord 管理的单独进程,并使用单独的数据库。我在单独的服务器上也有一个 redis。

我需要一些具有数据库访问权限的 celery 后台任务。

我该怎么做?

更新

好的,我可以运行多个 celery worker。我可以从控制台做到这一点

$ export DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
$ /home/.../my_vitrual_env/bin/celery -A my_proj worker -l info

但是我不能从 supervisord 运行它

[program:celery2]
directory=/home/.../my_proj
command=/home/.../my_vitrual_env/bin/celery -A asl worker -l info
environment=DJANGO_SETTINGS_MODULE=my_proj.settings_production_2
...

最佳答案

您为您的项目配置一个应用程序。例如:


    my_proj
      | - my_proj
        |- __init__.py
        <b>|- celery.py</b>
        |- settings.py
        |- settings_development.py
        |- settings_production_1.py
        |- settings_production_2.py
        |- settings_production_3.py

等等

在 celery.py 中,您从 the appropriate settings object 配置 celery 应用程序通过设置 DJANGO_SETTINGS_MODULE 环境变量并使用它来加载适当的设置。

然后在 supervisord 中,通过将起始行指定为 celery multi -A my_proj 并使用正确的 DJANGO_SETTINGS_MODULE env 变量,为每个站点提供自己的 celery。

关于django - 具有多个 django 站点的 celery ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041596/

相关文章:

javascript - 如何在javascript中获取django表单值而不将其保存到模型中

python - 提高 KeyError(key) KeyError : 'SECRET_KEY' with django on production settings

python - 无法为 `pip` 安装 `python 3.3` 但对于 `python 2.7` 工作正常

Django 命名 url、通用 View ?

memory - Redis 忽略 maxmemory 设置

redis - 有没有redis输入插件支持 “lpop”命令?

python - 同时 Celery 任务共享一个公共(public)对象(数据库连接)

node.js - 使用 Node jS 的 Redis 配置集

django - 我应该使用 attach-daemon 还是 smart-attach daemon 用 UWSGI 自动启动 celery(并轻松更新任务)

python - Celery 获取已注册任务列表