gpt4 book ai didi

python - 当他们收听的队列变空时,如何自动杀死 celery worker ?

转载 作者:太空狗 更新时间:2023-10-30 00:19:33 25 4
gpt4 key购买 nike

一旦他们一直在收听的队列变空,是否有任何“干净”的方式杀死工作进程?

我的想法是,如果他们没有任何工作要做,我不需要让工作人员持续监听队列。我尝试了自动缩放选项,但根据我的经验,即使我将下限阈值设置为 0,工作人员也不会死。

在我的例子中,我需要使用 celery 从某个地方下载 1000 个文件。所以我将 1000 个任务放入队列中,但这就是我希望这批 worker 完成的所有工作。如果他们在下载完所有文件后能够以某种方式死亡,并且在我记得手动终止进程之前不会闲置在那里,那将是理想的。

我找不到任何关于如何从 celery 中做到这一点的建议。任何的想法?谢谢!

最佳答案

搭配的很好Rq simple job queue system ,您将以“突发模式”运行它。 worker 将启动,开始处理队列中的所有作业,然后结束。为了处理更多作业,我们每隔一分钟左右使用 Cron 再次启动工作程序。

对于 Celery,我们可以通过使用两个单独的 Cron 作业来完成等效操作:

*/2 * * * * celery -A proj worker -l info

每偶数分钟启动一次 Celery。

1-59/2 * * * * ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill

奇数分钟,stop celery worker 。对我们来说幸运的是:“启动关闭时,worker 将在它实际终止之前完成所有当前正在执行的任务”。

以上的组合意味着 Celery 只运行了大约 50% 的时间。通过一些调整,它可以缩小到 5% 左右。

实际上,我只是让 Celery 一直运行。在空队列上等待的单个进程几乎不会消耗任何资源。它也更加灵敏和可靠。

关于python - 当他们收听的队列变空时,如何自动杀死 celery worker ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25060616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com