【问题标题】:Does Celery task code need to exist on multiple machines?Celery 任务代码是否需要存在于多台机器上?
【发布时间】:2019-04-18 07:38:47
【问题描述】:

试图把我的头缠在 Celery 周围。到目前为止,我知道有客户、经纪人和工人。为简单起见,我正在查看Dockerized version of this setup

如果我理解正确,客户端在代理上排队一个任务,然后工作人员不断尝试从代理中弹出并处理该任务。

在示例中,Client (in this case a Flask app)Worker 似乎都引用了 exact same code。对吗?

这是否意味着如果每个组件都被分解到它们自己的机器上,那么代码就需要同时部署到客户端和工作机器上?这些部分需要访问相同的任务/功能才能完成各自的工作,这似乎很奇怪。

【问题讨论】:

    标签: celery


    【解决方案1】:

    这也是我最初感到困惑的一件事。任务的代码不必同时出现在两者上,只有工作人员需要代码来完成实际工作。当您说客户端将任务排入代理然后由工人执行时,了解其工作原理至关重要。客户端只向代理发送消息,而不是实际任务。该消息包含任务名称、参数和其他内容。所以客户端只需要知道这些关于任务的参数就可以将它排入队列。然后,它可以在不知不觉中使用send_task 将任务入队。

    这就是我在一个简单的求职者应用程序中使用 Celery 的方式,我想尽可能地解耦各个部分。我有一个 Flask 应用程序,用作用户可以管理的作业的 UI(创建、查看状态/进度等)。Flask 应用程序使用 APScheduler 来实际运行作业(其中作业只不过是 Celery 任务) .现在,我希望客户端部分(Flask 应用程序 + 调度程序)尽可能少地了解将它们作为作业运行的任务。这意味着他们可以接受他们的名字和论据。为了使它真正独立于任务的代码,我通过代理从工作人员那里获取这些信息。您可以从我最初创建的this issue 中看到更多背景。

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 1970-01-01
      • 2012-04-07
      • 2020-06-29
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      相关资源
      最近更新 更多