【问题标题】:Why does Celery discourage worker & beat together?芹菜为什么气馁工人并一起殴打?
【发布时间】:2018-12-25 20:24:33
【问题描述】:

来自 celery 帮助功能:

> celery worker -h

...

Embedded Beat Options:
  -B, --beat            Also run the celery beat periodic task scheduler. Please note that there must only be
                        one instance of this service. .. note:: -B is meant to be used for development
                        purposes. For production environment, you need to start celery beat separately.

这也出现在the docs

您还可以通过启用 workers -B 来将 beat 嵌入到 worker 中 选项,如果你永远不会运行超过一个工人,这很方便 节点,但它不常用,因此不推荐 用于生产:

celery -A proj worker -B

但实际上并没有解释为什么在生产中使用它是“不好的”。希望得到一些见解。

【问题讨论】:

    标签: celery celerybeat


    【解决方案1】:

    --beat 选项将与工作人员一起启动节拍调度程序。

    但你只需要一个节拍调度器。

    在生产环境中,您通常有不止一名工作人员在运行。使用--beat 选项将是一场灾难。

    例如:您在每天上午 12 点安排了一个活动。

    如果您开始了两个节拍过程,该活动将在每天上午 12 点运行两次。

    如果你永远不会运行多个工作节点,--beat 选项就好了。

    【讨论】:

    • @zerohedge worker node = worker 进程,两个worker node(进程)通常在生产中运行在不同的机器上。
    • 所以如果我目前只有这个celery -A myappname worker,将其更改为celery -B myappname worker 不应该对生产产生不利影响吗? (如果有任何相关性,在 Heroku 上运行我的应用程序)
    • 如果你只有一个工作节点,-B 就可以了。否则,您需要运行单独的节拍过程。
    • 那是我不确定的,这算不算单节点?
    • 当你运行一个 celery worker 时,它会创建一个父进程来管理正在运行的任务。该进程处理簿记功能,例如发送/接收队列消息、注册任务、终止挂起的任务、跟踪状态等。然后该进程生成 N 个子工作进程,它们实际执行各个任务。该数字由启动 worker 时的 -c 参数确定。父进程(及其所有子进程)称为工作节点。
    猜你喜欢
    • 2022-01-08
    • 2018-08-24
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多