gpt4 book ai didi

重启 celery worker 的 Python Celery 任务

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

在 celery 中,有没有一种简单的方法来创建一个(系列)任务,我可以用它来自动重启一个 worker?

目标是让我的部署在每次从 github 获得新资源时自动重启所有子 celery worker。因此,我可以向该机器上的管理 celery 实例发送一个 restartWorkers() 任务,该任务将终止(实际上是停止等待)该机器上的所有 celery worker 进程,并使用新模块重新启动它们。

计划是每台机器有:

  • 管理节点[队列:管理,特定于机器] - 负责管理机器上的其余工作人员,根据需要启动新节点并杀死旧节点
  • Worker nodes [Queues: git revision specific, worker specific, machine specific] - 实际负责完成工作。

看起来我需要的代码在 dist_packages/celery/bin/celeryd_multi.py 中的某个地方,但是源代码对于新手来说相当不透明,我不知道它应该如何工作或者它实际从哪里开始节点。 (看起来 shutdown_nodes 是调用终止进程的正确代码,我正在慢慢调试它以弄清楚我的参数应该是什么)

是否有我可以调用的函数/函数 restart_nodes(self, nodes) 或者我是否要从 python 中运行 shell 脚本?

/此外,是否有比终止并重新启动进程更简单的方法将源代码重新加载到 Python 中?如果我知道重新加载模块确实有效(实验表明它没有。在我重新启动该过程之前对功能的更改不会渗透),我会这样做而不是间接使用管理节点。

编辑:我现在可以关闭了,感谢广播(谢谢 mihael。如果我有更多的代表,我会投票)。有什么方法可以广播重启吗?有 pool_restart,但这不会终止节点,这意味着它不会更新源。

我一直在研究 celery.bin.celeryd:WorkerCommand().run() 中的一些幕后源代码,但是在运行调用之前和之后发生了一些奇怪的事情,所以我不能只需调用该函数即可完成,因为它会崩溃。从 python 脚本调用 shell 命令来运行另一个 python 脚本只是 0 意义,我不敢相信我是第一个想要这样做的人。

最佳答案

你可以尝试使用broadcast functionality celery 。

在这里你可以看到一些很好的例子:https://github.com/mher/flower/blob/master/flower/api/control.py

关于重启 celery worker 的 Python Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447322/

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