Python Celery socket.error: [Errno 61] 连接被拒绝

4 投票
4 回答
8290 浏览
提问于 2025-04-17 18:24

我正在使用Celery 3.0,并且我的配置文件如下所示。

celeryconfig.py

BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

CELERY_IMPORTS = ("tasks", )
CELERY_TASK_RESULT_EXPIRES = 300

tasks.py

import celery

@celery.task
def function(x,y):
    return x + y

还有function.py

from tasks import function

print function.delay(4,4).get()

我用下面的命令来运行这个应用程序

celeryd --loglevel=INFO --config=celeryconfig

到现在为止,一切都运行得很好。我已经启动了redis和celery,并且得到了结果。

但是当我从另一个叫做parallelizer的文件中运行函数命令时,

我遇到了socket错误,

 socket.error: [Errno 61] Connection refused

我的文件内容如下,

from examples.dummy.tasks import function
print function.delay(4,4).get()

有什么想法吗?

4 个回答

7

我也遇到过同样的问题,后来发现是 rabbitmqredis 这两个服务停止了。

在Mac上,如果这些服务是通过Homebrew安装的,你可以通过在终端运行以下命令来检查这些服务是否在运行,

brew services list

如果是通过 brew 安装的,可以用以下命令重启服务,

brew services restart rabbitmq
brew services restart redis
7

我之前也遇到过同样的问题,问题出在我在项目的 __init__.py 文件里漏掉了这段代码:

from __future__ import absolute_import

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

希望这对某些人有帮助...

1

问题是,

我在一个和我的并行处理程序不同的路径下运行了celeryconfig.py。

当我把celeryconfig.py移动到和并行处理程序相同的路径时,问题就解决了。

撰写回答