8

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

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

4

2 回答 2

7

这个问题很头疼,我刚来的时候没有注意到@Crazyshezy 的评论。我刚刚通过更改settings.py中每个 Web 应用程序的代理 URL 来完成此操作。

app1.settings.py

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

app2.settings.py

BROKER_URL = 'redis://localhost:6379/1'
于 2013-09-25T12:02:15.633 回答
3

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

主管配置文件如下所示:

[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

如果你使用这个设置还有另一个好处:celery 守护进程完全在用户空间中运行。

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

于 2012-12-18T08:23:01.603 回答