首页 > 解决方案 > 删除 Google Cloud Task 不会停止任务运行

问题描述

我有一个任务队列,用户可以将任务推送到其中,一次只能运行一个任务,由队列的并发设置强制执行。在某些情况下(例如长时间运行的任务),他们可能希望取消正在运行的任务以释放队列以处理下一个任务。

为了实现这一点,我一直将任务队列作为 Flask 应用程序运行,如果用户希望取消任务,我会为给定的队列和任务调用 python 客户端库的delete_task方法。

但是,我看到即使在删除任务之后,基础任务也会继续处理。一直在尝试查找有关 Cloud Tasks 如何处理被删除任务的文档,但没有找到任何具体的内容。

希望我能够监听某种信号,以便在收到删除时优雅地关闭进程。或者如果父任务被删除,底层进程将被杀死。

以前有人使用过 Cloud Tasks API 吗?假设已删除的任务将清除所有正在运行的进程是否正确?

标签: google-cloud-platformgoogle-cloud-tasks

解决方案


我不知道工人如何能够发现它正在处理的任务已被删除。

在worker眼中,任务就是一个传入的Http请求。我不知道队列如何告诉该特定进程停止。我相当确定“删除”一个任务只是将它从队列中删除。

您必须构建一个自定义的“取消”功能,以便能够联系到该工作人员。

或者这个工作人员必须定期检查队列以查看其任务是否仍然存在。 https://cloud.google.com/tasks/docs/reference/rest/v2/projects.locations.queues.tasks/get https://googleapis.dev/python/cloudtasks/latest/gapic/v2/api.html #google.cloud.tasks_v2.CloudTasksClient.get_task

如果您尝试将“获取任务”称为已删除任务,我实际上不确定队列会返回什么,因为我没有看到任务的“状态”属性。也许它会返回一个错误,比如“任务不存在”


推荐阅读