gpt4 book ai didi

python - 在 Python 中写入流式传输到 Google Cloud Storage

转载 作者:太空宇宙 更新时间:2023-11-04 04:28:40 25 4
gpt4 key购买 nike

我正在尝试将用 Python 编写的 AWS Lambda 函数迁移到 CF

  1. 即时解压缩并逐行阅读
  2. 对每一行执行一些光照转换
  3. 将未压缩的输出(一次一行或 block )写入 GCS

输出大于 2GB - 但略小于 3GB,所以它适合 Lambda只是

好吧,GCP 似乎不可能或涉及更多:

  • 未压缩无法放入内存或 /tmp - 在撰写本文时限制为 2048MB - 因此 Python 客户端库 upload_from_file(或 _filename)不能使用
  • this官方论文,但令我惊讶的是,它指的是 boto,这是一个最初为 AWS S3 设计的库,并且自从 boto3 已经过时了一段时间。没有真正的 GCP 流式写入或读取方法
  • Node.js 有一个简单的 createWriteStream() - 不错的文章 here顺便说一句——但在 Python 中没有等效的一行代码
  • Resumable media upload听起来像,但是很多代码在 Node 中处理的东西更容易
  • AppEngine 有 cloudstorage但在它之外不可用 - 并且已过时
  • 几乎没有关于用于逐行编写文本/纯数据的工作包装器的示例,就好像 GCS 是本地文件系统一样。这不仅限于 Cloud Functions 和 Python Client 库缺少的功能,但由于资源限制,它在 CF 中更为严重。顺便说一句,我是 discussion 的一员添加一个可写的 IOBase 函数,但它没有牵引力。
  • 显然,使用 VM 或 DataFlow 不适合手头的任务。

在我看来,从基于云的存储进行流式(或类流式)读/写甚至应该包含在 Python 标准库中。

按照当时的建议,仍然可以使用 GCSFS ,当您将内容写入 FileObj 时,它会在幕后为您分块提交上传。同一个团队编写了 s3fs。我不知道 Azure。

AFAIC,我会坚持使用 AWS Lambda,因为输出可以放入内存中 - 目前 - 但分段上传是用最少的内存支持任何输出大小的方法。

想法或替代方案?

最佳答案

我对 multipartresumable 上传感到困惑。后者是“流式传输”所需要的——它实际上更像是上传缓冲流的 block 。

Multipart 上传是在同一个 API 调用中同时加载数据和自定义元数据。

虽然我喜欢GCSFS非常 - Martin ,他的主要贡献者非常敏感-,我最近发现an alternative使用 google-resumable-media图书馆。

GCSFS 构建在核心 http API 之上,而 Seth 的解决方案使用由 Google 维护的低级库,与 API 更改更加同步,其中包括指数备份。后者对于大/长流来说确实是必须的,因为连接可能会断开,即使在 GCP 中也是如此 - 我们遇到了 GCF 的问题。

最后,我仍然相信 Google Cloud Library是添加类似流的功能的正确位置,具有基本的writeread。它有 core code already .

如果您也对核心库中的该功能感兴趣,请竖起大拇指 here - 假设优先级基于此。

关于python - 在 Python 中写入流式传输到 Google Cloud Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53068947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com