我在同一台服务器上使用apache2虚拟服务器运行多个Django/apache/wsgi网站,并且想要使用celery。但是如果我为多个网站启动celeryd,所有网站都会使用我最后启动的celeryd实例的配置(日志、数据库等)。
有没有办法使用多个Celeryd(每个网站一个)或一个适用于所有网站的Celeryd?看起来应该是可行的,但我找不到具体方法。
有没有办法使用多个Celeryd(每个网站一个)或一个适用于所有网站的Celeryd?看起来应该是可行的,但我找不到具体方法。
这个问题让我很头疼,一开始来这里的时候没有注意到@Crazyshezy的评论。我只是通过更改每个Web应用程序中settings.py中的代理URL来解决了这个问题。
app1.settings.py
BROKER_URL = 'redis://localhost:6379/0'
app2.settings.py
BROKER_URL = 'redis://localhost:6379/1'
是的,有一种方法。
我们使用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
如果您使用此设置,还有另一个优点:celery守护程序完全在用户空间中运行。
请记住为您的项目使用不同的代理后端。如果您为每个项目使用相同的rabbitmq虚拟主机或相同的redis数据库,则无法正常工作。