问题描述
我正在使用 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,您将在进一步的迭代中看到它。