【问题标题】:Can Celery tasks survive restart?Celery 任务可以在重启后存活吗?
【发布时间】:2015-06-26 16:10:21
【问题描述】:

我需要构建一个系统来处理两种类型的任务。一种类型可以创建更多自己的任务或另一种类型的任务。将有很少的工人(2-3),只有一个主机。最重要的要求是系统应该优雅地处理重新启动:即在重新启动时,正在进行的任务应该从头开始,并且工作人员应该拿起在重新启动之前排队的任务。 看看 Celery,它似乎适合这个用例。但是,我有几个问题:

1) Celery 是否能够按照描述处理整个系统的重启? (Celery + workers + broker,一切重启,完全断电)。

2) 用于这种情况的最佳代理是什么?我更喜欢 SQLAlchemy + SQLite,因为它更“独立”,但如果 R​​abbitMQ 是正确的选择,考虑到优雅地处理完全重启的要求,那么我可以选择它。

【问题讨论】:

    标签: celery


    【解决方案1】:

    1) Celery 是否能够按照描述处理整个系统的重启? (Celery + workers + broker,一切重启,完全断电)。

    是的,当您在 RabbitMQ 上创建自己的队列时(Persistent queue )即使在您的服务器重新启动后,该任务也将是 恢复,将由 Celery 执行。

    2) 用于这种情况的最佳代理是什么?我更喜欢 SQLAlchemy + SQLite,因为它更“独立”,但如果 R​​abbitMQ 是正确的选择,考虑到优雅地处理完全重启的要求,那么我可以选择它。

    使用 RabbitMQ。我们在生产中使用 RabbitMQ + Celery。所以我会 建议你使用 RabbitMQ 作为代理。

    Celery + RabbitMQ Best Practice

    Message Reliability

    注意事项:

    1. 使用更多队列(即不仅仅是默认队列)
    2. 使用优先工作人员
    3. 使用 Celery 的错误处理机制

    【讨论】:

    • 谢谢。我将使用具有持久队列和持久交换的 Celery + RabbitMQ 构建它。
    • 你好@StefanD 当然。如果您需要更多帮助,请告诉我
    • @Backtrack 我有一个任务,它在一台机器上执行一些进程,重新启动该机器。 Rabbit MQ 是否能够将任务识别为已完成,Celery 任务是否支持这一点?它会在哪里回来看到它只执行了部分任务?
    • upvoted :) 如果 celery 工作人员尝试在多进程/线程设置中访问它,sqlite 不会有问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2017-05-05
    相关资源
    最近更新 更多