工人解决策略

时间:2012-11-25 13:01:07

标签: python celery

我有一个应用程序,它将一些操作委托给芹菜任务。必须由不同的工作人员执行操作,具体取决于某些参数。我已经考虑过使用队列来实现它。我的想法如下:

  1. 客户端请求来自特定邮件queue1
  2. 的操作
  3. 如果worker1(专门负责queue1)已经有效,则会处理请求
  4. 如果没有工作人员正在监听queue1,那么全能工作人员(worker-main)将实例化worker1。该请求将被提交至worker1
  5. worker1会在一段时间后自行关闭而不会被使用
  6. 我对芹菜的了解有限,我有几个问题。

    1. 如何在芹菜中实现worker-main:这是一个监听所有队列的工作者,但优先级低于其他任何工作者。也就是说,只有在任何其他工作人员没有采取请求时,它才会起作用。
    2. woker-main如何创建worker1一旦创建者worker1必须与queue1相关联,其优先级高于worker-main }?
    3. 请求可以从worker-main转发到worker1吗?应该直接将回复发送给客户。
    4. 可以worker1自行关闭吗?
    5. 您可以在下图中看到我尝试实现的架构的图形说明:

      multi-worker

1 个答案:

答案 0 :(得分:1)

您可以在顺序工作流中将“worker main”和“worker1”链接在一起,以便“worker main”始终在步骤1中处理作业,但如果检测到“worker1”已经启动,则只返回并且不执行任何操作。

因此任务首先命中“worker main”,“worker main”检查worker1正在运行的服务器的运行状态,如果该服务器未运行,则将其拉起,等待它完全启动,然后回报。这是proof of concept我测试了Celery如何在Celery中创建顺序工作流程,有更多实际经验的人可能有更好的解决方案。它还包含错误处理,如果工作人员失败,我认为在你的情况下。

请注意,此方法中没有队列概念。此外,您可以为worker1和worker2提供不同的方法名称,而不是区分参数,客户端可以对参数进行解析,然后选择要执行的celery方法。