我有一个非常简单的 Celery 任务,它运行一个(长时间运行的)shell 脚本:
import os
from celery import Celery
os.environ['CELERY_TIMEZONE'] = 'Europe/Rome'
os.environ['TIMEZONE'] = 'Europe/Rome'
app = Celery('tasks', backend='redis', broker='redis://OTHER_SERVER:6379/0')
@app.task(name='ct.execute_script')
def execute_script(command):
return os.system(command)
我在服务器MY_SERVER上运行此任务,并从也运行 Redis 数据库的OTHER_SERVER启动它。该任务似乎成功运行(我看到在文件系统上执行脚本的结果),但我总是开始收到以下错误:
INTERNAL ERROR: ConnectionError('Error 111 connecting to localhost:6379. Connection refused.',)
会是什么?为什么当我将 Redis 服务器设置为redis://OTHER_SERVER:6379/0
并且它可以工作(因为任务已启动)时尝试联系localhost
?谢谢
设置 backend
参数时,Celery
会将其用作结果后端。
在代码上,您告诉Celery
使用本地 redis 服务器作为结果后端。
你看到了ConnectionError
,因为芹菜无法将结果保存到本地 redis 服务器。
您可以禁用结果后端或启动本地 redis 服务器或将其设置为 OTHER_SERVER。
裁判:
- http://celery.readthedocs.org/en/latest/getting-started/first-steps-with-celery.html#keeping-results
- http://celery.readthedocs.org/en/latest/configuration.html#celery-result-backend