获取 GCS 存储桶 python 中的所有项目,同时它仍在写入

问题描述

我正在使用 python GCS 客户端。

我想在给定时间列出属于一个桶的所有 blob,但系统一直在不断地向这个桶写入新数据,而且比我读取的速度快得多

有没有可能是我的

all_blobs = list(client.list_blobs(bucket))

会永远运行吗? 它会不断带来新项目吗? 它是否在快照上运行并最终完成?

非常感谢

解决方法

您可以使用页面令牌来遍历 API 的页面

blobs = bucket.list_blobs(max_results=1000)
    for blob in blobs:
        print(blob.name)
    print(blobs.next_page_token)
    blobs = bucket.list_blobs(page_token=blobs.next_page_token,max_results=1000)
    for blob in blobs:
        print(blob.name)

这个例子中有两个有趣的部分

  • 您可以将 max_result 设置为 1000(最大值)以使用最大的页面
  • 下一页令牌是返回的最新对象/版本的 Base64 编码名称,如 documentation
  • 中所述

文档还提到:

  • 如果在下一页标记之前创建了一个 blob(假设按字母顺序排列),则不会通过遍历下一页来列出它
  • 相反,如果在下一页令牌之后创建了一个 blob,您将在进一步的迭代中看到它。