google-cloud-platform - 删除 Google Cloud Task 不会停止任务运行
问题描述
我有一个任务队列,用户可以将任务推送到其中,一次只能运行一个任务,由队列的并发设置强制执行。在某些情况下(例如长时间运行的任务),他们可能希望取消正在运行的任务以释放队列以处理下一个任务。
为了实现这一点,我一直将任务队列作为 Flask 应用程序运行,如果用户希望取消任务,我会为给定的队列和任务调用 python 客户端库的delete_task方法。
但是,我看到即使在删除任务之后,基础任务也会继续处理。一直在尝试查找有关 Cloud Tasks 如何处理被删除任务的文档,但没有找到任何具体的内容。
希望我能够监听某种信号,以便在收到删除时优雅地关闭进程。或者如果父任务被删除,底层进程将被杀死。
以前有人使用过 Cloud Tasks API 吗?假设已删除的任务将清除所有正在运行的进程是否正确?
解决方案
我不知道工人如何能够发现它正在处理的任务已被删除。
在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
如果您尝试将“获取任务”称为已删除任务,我实际上不确定队列会返回什么,因为我没有看到任务的“状态”属性。也许它会返回一个错误,比如“任务不存在”
推荐阅读
- python - Eli5 展示 Modelweights
- r - 如何获取 MICE 后的 AUC 和 SE 列表(用于 psfmi 包中的 pool_auc)?
- c - C中的指针和指向指针的指针
- outlook - 没有 full_access_as_app 权限的 EWS 访问用户日历
- python - 根据另一个数据帧中的信息填充一个数据帧
- php - WC add_to_cart 添加其他产品(如果已在购物车中)
- typescript - 是否可以使用镜头(或其他光学器件)进行约束模型更新?
- flask - 使用 ssh 端口转发时无法访问服务器的 localhost
- javascript - import 有时返回路径,有时返回路径文件的内容
- r - 如何使用 geom_label() 突出显示(粗体或斜体)特定标签