首页 > 解决方案 > 在 GCS 存储桶 python 仍在写入时获取所有项目

问题描述

我正在使用 python GCS 客户端。

我想列出在给定时间属于存储桶的所有 blob,但系统一直在向该存储桶写入新数据,并且比我读的快得多

有没有可能我的

all_blobs = list(client.list_blobs(bucket))

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

非常感谢

标签: google-cloud-storage

解决方案


您可以使用页面令牌来迭代 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(最大值)以使用最大页面
  • Next Page Token 是返回的最新对象/版本的 Base64 编码名称,如文档中所述

该文档还提到:

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

推荐阅读