我有一个非常简单的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上运行此任务,然后从OTHER_SERVER启动它,同时运行Redis数据库。 该任务似乎成功运行(我看到在文件系统上执行脚本的结果),但我总是开始收到以下错误:
INTERNAL ERROR: ConnectionError('Error 111 connecting to localhost:6379. Connection refused.',)
它可能是什么?为什么在我将Redis服务器设置为localhost
时它会尝试联系redis://OTHER_SERVER:6379/0
并且它可以正常工作(因为任务已启动)?感谢
答案 0 :(得分:2)
当您设置backend
参数时,Celery
会将其用作后端的结果。
在您的代码中,您告诉Celery
使用本地redis服务器作为结果后端。
您看到ConnectionError
,因为芹菜无法将reult保存到本地redis服务器
您可以禁用结果后端或启动本地redis服务器或将其设置为OTHER_SERVER。
参考: