【问题标题】:Celery not executing new tasks if redis lost connection is restablished如果重新建立redis丢失连接,芹菜不会执行新任务
【发布时间】:2020-04-30 22:45:04
【问题描述】:

我有一个 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_tasks.site24x7.test.delay()

它返回异步任务 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 -A monitoringExterne --app=monitoringExterne.celerys.site24x7

状态错误:在时间限制内没有节点回复。

$ celery -A monitoringExterne --app=monitoringExterne.celerys.site24x7 检查活动

错误:在时间限制内没有节点回复。

【问题讨论】:

    标签: python python-3.x redis celery


    【解决方案1】:

    如果您的工作人员未订阅 site24x7 队列,则该队列中的任务数量将不断增加...尝试使用以下方式运行工作:celery -A monitoringExterne.celerys.site24x7 -Q site24x7 -l info

    另外,请记住 -A--app 是同一个标志,您不应该同时使用两者。

    如果您得到No nodes replied within time constraint 输出,这意味着您的集群中没有活动的 Celery 工作人员,这也可能是该队列中任务数量增加的原因 - 没有工作人员来执行它们!

    【讨论】:

    • 感谢您的反馈。任务正在处理中,但只有在 redis 关闭然后再次启动时才停止执行新任务。当我启动 celery worker 时,我按如下方式启动它:celery -A monitoringExterne worker --app=monitoringExterne.celerys.site24x7 -n site24x7.site24x7 -Q site24x7 --loglevel=DEBUG 我会尝试在不指定 -A monitoringExterne 的情况下启动它,看看结果如何。
    • 嗨@KheshavSewnundun,你解决了这个问题吗?
    • 你好@Geku 不幸的是没有。我们已经从 redis 切换到 Rabbitmq 并且问题不那么频繁了。
    • 感谢@KheshavSewnundun 的更新!我目前正在尝试修复它,但没有成功。我也要切换到 Rabbitmq。
    猜你喜欢
    • 2018-03-07
    • 2016-02-21
    • 2016-08-25
    • 2022-01-21
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2022-01-13
    相关资源
    最近更新 更多