如何使用 python SDK 和 Flask 向 Google API 请求后使用流式传输到 stdout 的数据

问题描述 投票:0回答:1

我正在使用 Google 的 vertex python API,并且无法理解如何利用“LRO”的输出来进行长时间运行操作。我被困的案子正在打电话

aiplatform.ImageDataset.create(

据我发现,这没有提供在调用操作后通过请求检索操作名称的好方法,但该名称会在请求关闭后立即流式传输到我的 Flask 控制台,因为“create”方法是异步的,但即使我称之为同步,它仍然以这种方式流式传输到标准输出。流式输出看起来像这样

INFO:google.cloud.aiplatform.datasets.dataset:Creating ImageDataset
INFO:google.cloud.aiplatform.datasets.dataset:Create ImageDataset backing LRO: projects/888888888/locations/us-central1/datasets/88888888/operations/88888888
DEBUG:google.api_core.retry:Retrying due to , sleeping 0.6s ...
DEBUG:google.api_core.retry:Retrying due to , sleeping 1.3s ...
INFO:google.cloud.aiplatform.datasets.dataset:ImageDataset created. Resource name: projects/888888888/locations/us-central1/datasets/888888888
INFO:google.cloud.aiplatform.datasets.dataset:To use this ImageDataset in another session:
INFO:google.cloud.aiplatform.datasets.dataset:ds = aiplatform.ImageDataset('projects/8888888/locations/us-central1/datasets/888888888')

看来我被迫以某种方式使用这个流式输出来获得 LRO 操作,我已经寻找了几周的替代方案,但还没有找到,但我不知道如何使用它,我已经发现使用子进程的建议,我不知道如何生成并且似乎很难确保其关闭。我想知道是否有使用这种类型的流数据的标准方法,为什么他们会选择以这种方式返回响应,底层机制是什么,以及我在尝试使用它时是否走错了路。

flask google-api stdout long-running-processes long-running-task
1个回答
0
投票

我发现“流式传输”输出的机制是基类中长时间运行操作的日志记录机制,

class _Dataset(base.VertexAiResourceNounWithFutureManager):
它被扩展两次以创建我正在使用的 ImageDataset 类,额外的扩展给了我很难更快地追踪到行为。 lro 上的日志记录调用如下所示

_LOGGER.log_create_with_lro(cls, create_dataset_lro)

created_dataset = create_dataset_lro.result(timeout=None)

_LOGGER.log_create_complete(cls, created_dataset, "ds")

所以我的解决方案是创建一个与 ImageDataset 相同的替代类,但具有返回

create_dataset_lro
的方法,以便我可以访问 operation.name 属性

© www.soinside.com 2019 - 2024. All rights reserved.