在同一台服务器上运行多个Django Celery网站

时间:2012-12-18 01:18:59

标签: django celery django-celery supervisord celeryd

我正在使用apache2虚拟服务器在同一台服务器上运行多个Django / apache / wsgi网站。我想使用芹菜,但如果我为多个网站启动celeryd,所有网站都将使用我开始的最后一个celeryd实例的配置(日志,数据库等)。

有没有办法使用多个Celeryd(每个网站一个)或一个Celeryd用于所有这些?似乎它应该是可行的,但我不知道如何。

2 个答案:

答案 0 :(得分:4)

这个问题非常头疼,我第一次来到这里时没有注意到@Crazyshezy的评论。我刚刚通过在每个网络应用的 settings.py 中更改代理网址来实现此目的。

<强> app1.settings.py

BROKER_URL = 'redis://localhost:6379/0'

<强> app2.settings.py

BROKER_URL = 'redis://localhost:6379/1'

答案 1 :(得分:3)

是的,有办法。 我们使用supervisor为我们需要的每个项目启动celery守护进程。

supervisor配置文件如下所示:

[program:PROJECTNAME]
command=python manage.py celeryd --loglevel=INFO --beat
environment=PATH=/home/www-data/projects/PROJECTNAME/env/bin:/usr/bin:/bin
directory=/home/www-data/projects/PROJECTNAME/
user=www-data
numprocs=1
umask=022
stdout_logfile=/home/www-data/logs/%(program_name)s.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
stderr_logfile=/home/www-data/logs/%(program_name)s.error.log
stderr_logfile_maxbytes=50MB
stderr_logfile_backups=10
autorestart=true
autostart=True
startsecs=10
stopwaitsecs = 60
priority=998

如果使用此设置,还有另一个优点:芹菜守护进程完全在用户空间中运行。

请记住为您的项目使用不同的代理后端。如果您使用相同的rabbitmq虚拟主机或者对每个项目使用相同的redis数据库,它将无法工作。