【问题标题】:re-start celery queue after re-starting broker重新启动代理后重新启动芹菜队列
【发布时间】:2023-08-08 09:11:01
【问题描述】:

我启动了我的 celery worker 队列(在后台):

celery worker -Q my_queue -l info

此后,其代理 (redis) 被停止,同时后台 celery worker时间增加后不断尝试重新连接到 redis。

现在我的目标是在重新启动 redis 后重新启动 非重复 my_queue。我意识到在重新连接之前,以下 celery API 不会返回 my_queue

celery.task.control.inspect().active_queues()

现在,如果我开始一个新的my_queue,如果之后重新连接后台中的前一个celery worker,我将得到重复的my_queue

如果发现代理停止,一个解决方案可能是让celery worker 主动退出,但我没有找到正确的方法来做到这一点。我也不想被以前保存的 PID 杀死。任何建议或替代方案将不胜感激。

【问题讨论】:

    标签: redis celery


    【解决方案1】:

    好吧,我知道这与我的要求相矛盾,但似乎我确实需要 PID 文件的帮助:

    celery worker -Q my_queue -l info --pidfile=pid.log
    

    如果保存在 pid.log 中的 pid 已经在运行,则会引发异常。

    这仍然不是理想的解决方案,如果发现其代理停止,任何关于如何让celery worker 主动退出的建议仍将不胜感激。

    【讨论】: