在django中经常使用celery完成异步任务。之前一直是在每个django应用服务器上启动一个redis服务,一直没有问题。
随着应用服务器数量增多,希望在一台机器上假设一个redis服务,所有的django服务器公用这个redis服务。
假设在redis_server_host主机上架设好了redis服务,端口6379
vim ${dango_project_settings_dir}/celery.py
redis_broker = "redis://%s:%d/0" % (redis_server_host, 6379)
CELERY_RESULT_BACKEND = "redis://%s:%d/1" % (redis_server_host, 6379)
#app = Celery('hcloud', backend='redis', broker=redis_broker)
# backend默认使用本地redis服务,这会失败。
#app = Celery('hcloud', backend=None, broker=redis_broker)
# 不使用backend,可以成功
app = Celery('hcloud', backend=CELERY_RESULT_BACKEND, broker=redis_broker)
# 使用同样的redis server,但是数据库改为1,成功
如果是以root身份启动celery,还要在上述文件中加入以下文本:
from celery import Celery, platforms
platforms.C_FORCE_ROOT = True