有没有"清洁"一旦他们一直在听的队列被清空,就会杀死工人进程?
我的想法是,如果他们没有任何工作要做,我不需要让工人不断听队列。我尝试了自动缩放选项,但根据我的经验,即使我将下阈值设置为0,工作人员也不会死。
在我的情况下,我需要使用芹菜从某个地方下载1000个文件。所以我把1000个任务放在队列中,但这就是我希望这批工人做的所有工作。如果他们在完成所有文件的下载之后能够以某种方式死亡,那将是理想的,而不是在那里闲置,直到我记得手动杀死进程。
我无法从芹菜中找到任何关于如何做到这一点的建议。 任何的想法? 谢谢!
答案 0 :(得分:0)
使用非常好的Rq simple job queue system,您将以“突发模式”运行它。工作人员将启动,开始处理队列中的所有作业,然后死亡。为了处理更多的工作,我们每分钟使用Cron再次启动工作人员。
对于Celery,我们可以通过使用两个单独的Cron作业来完成相同的工作:
* / 2 * * * * celery -A proj worker -l info
每隔一分钟就会启动Celery。
1-59 / 2 * * * * ps auxww | grep'芹菜工人'| awk'{print $ 2}'| xargs kill
在奇数分钟,stop芹菜工人。对我们来说幸运的是:“当启动关闭时,工作人员将在实际终止之前完成所有当前正在执行的任务。”
上述组合意味着Celery仅运行约50%的时间。通过一些调整,它可以缩小到5%左右。
在实践中,我只是让芹菜一直在运行。等待空队列的单个进程几乎不消耗任何资源。它的响应性和可靠性也更高。