【发布时间】:2021-06-22 06:44:35
【问题描述】:
如何正确终止在 kubernetes 环境中的容器上运行的 celery 任务?整个应用的结构(全部用Python编写)如下:
-
向我们的 API 发出请求的 SDK;
-
一种 Kubernetes 结构,其中一个 pod 运行 API,其他 pod 运行 celery 容器,以处理一些可由 API 触发的长时间运行的任务。这些 celery 容器自动缩放。
假设我们调用一个 SDK 方法,该方法反过来向 API 发出请求,触发在 celery 容器上运行的任务。如果需要,终止此任务的正确/优雅方法是什么?我知道 celery 任务有一个 revoke() 方法,但我尝试使用这种方法但它不起作用,即使使用 terminate=True 和 signal=signal.SIGKILL (可能这与我使用 Azure 服务的事实有关巴士作为经纪人?)
也许 celery 任务与其对应容器名称之间的映射会有所帮助,但我也找不到获取此信息的方法。
任何帮助和/或想法将不胜感激。
【问题讨论】:
-
请问您为什么要撤销/终止任务?是由于应用原因(如不相关的任务)还是架构限制?
-
这是由于任务可能卡住和/或用户想要取消其执行
-
你能加点努力吗?你试过的撤销码sn-p?
-
非常抱歉迟到的答案,@ItayB。我找到了一个使用在 API 和 celery 容器之间共享的文件的解决方案。我在下面的回答中更详细地描述了它。尽管如此,还是非常感谢!
标签: python kubernetes containers celery