我有一个应用程序,它将一些操作委托给芹菜任务。必须由不同的工作人员执行操作,具体取决于某些参数。我已经考虑过使用队列来实现它。我的想法如下:
queue1
worker1
(专门负责queue1
)已经有效,则会处理请求queue1
,那么全能工作人员(worker-main
)将实例化worker1
。该请求将被提交至worker1
。worker1
会在一段时间后自行关闭而不会被使用我对芹菜的了解有限,我有几个问题。
worker-main
?:这是一个监听所有队列的工作者,但优先级低于其他任何工作者。也就是说,只有在任何其他工作人员没有采取请求时,它才会起作用。woker-main
如何创建worker1
?一旦创建者worker1
必须与queue1
相关联,其优先级高于worker-main
}?worker-main
转发到worker1
吗?应该直接将回复发送给客户。worker1
自行关闭吗? 您可以在下图中看到我尝试实现的架构的图形说明:
答案 0 :(得分:1)
您可以在顺序工作流中将“worker main”和“worker1”链接在一起,以便“worker main”始终在步骤1中处理作业,但如果检测到“worker1”已经启动,则只返回并且不执行任何操作。
因此任务首先命中“worker main”,“worker main”检查worker1正在运行的服务器的运行状态,如果该服务器未运行,则将其拉起,等待它完全启动,然后回报。这是proof of concept我测试了Celery如何在Celery中创建顺序工作流程,有更多实际经验的人可能有更好的解决方案。它还包含错误处理,如果工作人员失败,我认为在你的情况下。
请注意,此方法中没有队列概念。此外,您可以为worker1和worker2提供不同的方法名称,而不是区分参数,客户端可以对参数进行解析,然后选择要执行的celery方法。