python-3.x 如果重新建立Redis丢失连接,Celery不执行新任务

wqnecbli  于 2023-02-26  发布在  Python
关注(0)|答案(2)|浏览(257)

我有一个Celery worker配置为连接到redis,如下所示:

celery_app_site24x7 = Celery('monitoringExterne.celerys.site24x7',
                             broker=settings.REDIS['broker'], backend=settings.REDIS['backend'])

celery_app_site24x7.conf.broker_transport_options = {
    'visibility_timeout': 36000
}

celery_app_site24x7.conf.socket_timeout = 300
celery_app_site24x7.conf.broker_connection_max_retries = None
celery_app_site24x7.config_from_object('django.conf:settings')
celery_app_site24x7.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

问题是,如果Redis关闭,重新建立连接,则添加到队列中的新任务不会执行:

[2020-01-13 10:10:14,517: ERROR/MainProcess] consumer: Cannot connect to redis://xxx.xxx.xxx.xx:6380/10: Error while reading from socket: ('Connection closed by server.',).
Trying again in 2.00 seconds...

[2020-01-13 10:10:16,590: INFO/MainProcess] Connected to redis://xxx.xxx.xxx.xx:6380/10
[2020-01-13 10:10:16,699: INFO/MainProcess] mingle: searching for neighbors
[2020-01-13 10:10:17,766: INFO/MainProcess] mingle: all alone

我已经通过django shell手动调用了一个celery 任务,如下所示:
celery任务站点24 x7测试延迟()
它向我返回异步任务ID,但工作进程不处理此任务。

<AsyncResult:ff634b85-edb5-44d4-bdb1-17a220761fcc>

如果我继续延迟启动任务,队列将不断增加:

127.0.0.1:6379[10]> llen site24x7
(integer) 4
127.0.0.1:6379[10]> llen site24x7
(integer) 5

下面是celery 的输出状态和检查
$ celery -外部监控--应用程序=外部监控. celerys.site24x7
状态错误:没有节点在时间限制内回复。
$ celery -外部监控--应用程序=监控外部. celerys.site24x7检查活动
错误:在时间限制内没有节点回复。

ukdjmx9f

ukdjmx9f1#

如果您的工作线程未订阅site24x7队列,则该队列中的任务数将不断增加...请尝试使用以下内容运行工作:celery -A monitoringExterne.celerys.site24x7 -Q site24x7 -l info
另外,请记住-A--app是同一个标志,不应同时使用。
如果您得到的是No nodes replied within time constraint输出,这意味着集群中没有活动的Celery工作线程,这也可能是该队列中任务数量增加的原因-没有工作线程来执行它们!

8yparm6h

8yparm6h2#

Redis上的Celery似乎存在一个问题,实际上可能是导致此问题的原因:
Worker stops consuming tasks after redis reconnection

相关问题