google-cloud-storage - 在 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(最大值)以使用最大页面
- Next Page Token 是返回的最新对象/版本的 Base64 编码名称,如文档中所述
该文档还提到:
- 如果在 Next Page Token 之前创建了 blob(假设按字母顺序),则不会通过遍历下一页来列出它
- 相反,如果在 Next Page Token 之后创建了 blob,您将在进一步的迭代中看到它。
推荐阅读
- python - 我可以在 python 方法中需要参数子集吗?
- javascript - 如何使用 Puppeteer 设置间隔以运行一定的时间?
- excel - 从文件夹中的文件列表中提取单元格的部分值到主文件?
- python - Dask:不能安全地将非等效 float64 转换为 int64,但只有 object 和 int64 列
- python - API Key 是否足以访问 GAE AdminAPI 功能?
- javascript - 如何优化 React 数组多值过滤
- javascript - 如何有条件地使用 rxjs 进行缓冲?
- r - R Markdown:如何使内联代码不执行?
- javascript - 需要 javascript DOM 帮助
- javascript - 弹出窗口立即消失