如何在 kubernetes 环境中正确终止 celery 任务?
How can I properly kill a celery task in a kubernetes environment?
如何正确终止 kubernetes 环境中容器上的 celery 任务 运行ning?整个应用程序的结构(全部写在Python)如下:
向我们的 API;
发出请求的 SDK
具有一个 pod 的 Kubernetes 结构 运行ning API 和其他 pods 运行ning celery 容器来处理一些长期运行宁任务可以由API触发。这些芹菜容器自动缩放。
假设我们调用一个 SDK 方法,该方法依次向 API 发出请求,触发任务在 celery 容器上 运行。如果需要,终止此任务的 correct/graceful 方法是什么?我知道芹菜任务有一个 revoke()
方法,但我尝试使用这种方法但它没有用,即使使用 terminate=True
和 signal=signal.SIGKILL
(也许这与事实有关我正在使用 Azure 服务总线作为代理?)
也许 celery 任务与其相应容器名称之间的映射会有所帮助,但我也找不到获取此信息的方法。
任何帮助 and/or 想法将不胜感激。
我找到的解决方案是写入由 API 和 Celery 容器共享的文件。在此文件中,每当捕获中断时,都会将标志设置为 true
。在芹菜容器内,我会定期检查此类文件的内容。如果标志设置为 true
,那么我会优雅地清理并引发错误。
如何正确终止 kubernetes 环境中容器上的 celery 任务 运行ning?整个应用程序的结构(全部写在Python)如下:
向我们的 API;
发出请求的 SDK具有一个 pod 的 Kubernetes 结构 运行ning API 和其他 pods 运行ning celery 容器来处理一些长期运行宁任务可以由API触发。这些芹菜容器自动缩放。
假设我们调用一个 SDK 方法,该方法依次向 API 发出请求,触发任务在 celery 容器上 运行。如果需要,终止此任务的 correct/graceful 方法是什么?我知道芹菜任务有一个 revoke()
方法,但我尝试使用这种方法但它没有用,即使使用 terminate=True
和 signal=signal.SIGKILL
(也许这与事实有关我正在使用 Azure 服务总线作为代理?)
也许 celery 任务与其相应容器名称之间的映射会有所帮助,但我也找不到获取此信息的方法。
任何帮助 and/or 想法将不胜感激。
我找到的解决方案是写入由 API 和 Celery 容器共享的文件。在此文件中,每当捕获中断时,都会将标志设置为 true
。在芹菜容器内,我会定期检查此类文件的内容。如果标志设置为 true
,那么我会优雅地清理并引发错误。