python-2.7 - 使用 Google Cloud Platform 的简单任务队列:Google PubSub 的问题
问题描述
我的任务:我不能公开谈论我的任务的具体内容,但这里有一个类比:每两个小时,我会收到数量不定的语音音频文件。有时只有10个,有时800个或更多。假设我有一个昂贵的 python 任务要对这些文件执行,例如自动语音识别。我有一个 Google Intance 托管组,可以部署任意数量的虚拟机来执行此任务。
问题:现在,我正在使用 Google PubSub。每两个小时,一个主题就会充满音频 ID。可以根据队列的大小部署托管组的实例。问题是,只有一个工作人员从 PubSub 订阅中获取所有消息,而其他工作人员没有收到任何消息,可能是因为队列没有那么长(最多约 1000 条消息)。这个问题在python Google Cloud github中报告了少数情况,不清楚是PubSub的预期目的,还是只是一个错误。
我如何在 Python 和 Google Cloud 中实现与简单的无服务器任务队列等效的功能,并且可以根据给定的指标(例如队列的大小)生成实例?这是 PubSub 的预期目的吗?
提前致谢。
解决方案
在 App Engine 中,您可以创建推送队列并设置速率/并发限制,Google 将为您处理其余的事情。App Engine 将根据需要进行扩展(例如增加 Python 实例)。
如果您不在 App Engine(例如 GKE)之外,那么 pubsub Python 客户端库可能会同时拉取许多消息。我们也很难控制这个(对于 google-cloud-pubsub==0.34.0),所以我们最终在 google-cloud-pubsub 之上编写了一个小的调整,调用 SubscriberClient.pull 并设置了 max_messages)。服务器端 pubsub API 确实遵守 max_messages。
推荐阅读
- c++ - 这个 2D 矩阵选择排序是如何工作的?
- c++ - 使用 URL 下载 C++ 文件不起作用。(%username% 和用户)
- python - 如何使用 unpack 和编解码器
- swagger - 如何在 http 转码的 zip 内容响应上设置标头?
- excel - 基于多个标准的值计数
- python - 显示 RTSP 媒体流和读取键盘输入/发送 Telnet 命令时出现延迟
- sql-server - SSIS 使用 SSIS 表达式将 mmddyyyy 格式的日期转换为日期格式
- kubeflow-pipelines - Kubeflow 处理大型输入文件时出错:节点资源不足:临时存储
- r - R:使用重复()时重复的错误值
- go - 对 Go 中的某些数据结构语法感到困惑