【问题标题】:When Celery will start a new worker?Celery 什么时候会开始一个新的工人?
【发布时间】:2021-11-04 19:30:02
【问题描述】:

我有一项任务要交给databases query。早些时候,worker2 已从我们的系统中记录下来。大约 30 分钟后,worker1 被记录在同一任务中,很像 restarting the job,它破坏了我的 sql 查询。我的问题是

  • 如果worker2 失败则启动worker1 ?
  • 如果worker1 启动并失败worker2

从我的代码中,我没有设置任何时间限制?提前感谢您的任何想法。

我正在使用 job = chain(single_job),但我只有一个 single_job job() 开始工作。

-更新:

我已经解决了这个问题,如果你有同样的问题,你可以在下面做。

请检查visibility timeout 以获取您的celery

请检查升级版本。

请取消sql查询的重试,有时sql查询不需要message queue

【问题讨论】:

    标签: multithreading celery message-queue worker


    【解决方案1】:

    大约有 18 种不同的情况会导致您所描述的情况。最常见的三种:

    1. 有人安排您的作业按照两次都发生的时间表运行
    2. 某人/某事启动了您任务的另一个实例
    3. 任务调用在某处失败,引发了大约 30 分钟后运行的重试。

    【讨论】:

    • 您好,您可以看看上面的mysql 吗? 1800 秒后,一个新的工人开始了,但我的第一个查询还没有完成。
    • 对于长时间执行的查询,python端通常会抛出一个超时错误,还有一个task time limit in celery that might be set。其中任何一个都可能导致任务在 mysql 端完成查询之前重试,因为 python 端可能已经看到异常。最好的办法是为失败的任务添加 try-except 并记录任何异常以确认是否由于超时而发生意外异常。
    • 谢谢。它在 1800 年代后一直重试。我没有设置任何 task_time_limit ,这意味着芹菜端的超时不是问题吗?我以前的 celery 版本是4.2.0,现在我更新到 4.4.0 并禁用了acks_late=False。我只是想避免重试并确定是数据库问题还是 python 超时。我很困惑。
    • 您能否发布一个使用select current_date() 作为查询的任务代码框架?
    • 上面是sql查询,表B是近5亿行。 T_T
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2011-10-14
    • 2016-12-01
    • 2012-05-12
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多