python - Boto3:WAITINGS3流式上传完成

标签 python amazon-web-services amazon-s3 boto boto3

我使用 S3.Client.upload_fileobj()BytesIO 流作为输入,将文件从流上传到 S3。我的函数不应该在上传完成之前返回,所以我需要一种等待它的方法。

从文档中看,没有明显的方法可以等待传输完成,但是有一些提示可以工作:

  1. 使用回调参数等待进度达到 100%。在 Javascript 中,使用回调或 promise 这将是微不足道的,但在 Python 中我不太确定。
  2. 使用 S3.Waiter 对象 检查对象是否存在。但它是通过每 5 秒轮询一次来实现的,而且似乎非常无效。我也不确定它是否会等到对象完成。
  3. 有一个 S3.MultipartUpload 类带有 .complete() 方法,但我怀疑它是否符合我的要求。
  4. 执行一个循环,检查对象是否已完全上传,如果没有,则休眠一会儿。但是如何检查对象是否完整?

我一直在谷歌搜索,但似乎没有人问同样的问题。此外,大多数讨论相关问题的结果都使用不同的 API(我相信 upload_fileobj() 是相当新的)。

编辑 如果发现关于S3.Client.put_object它也接受一个类似文件的对象并阻塞直到服务器响应。但这会与流结合使用吗?我不确定 Python 多线程在这里是如何工作的。流最初来自 S3.Client.download_fileobj(),通过 subprocess.Popen() 进行管道传输,然后应该上传回 S3。据我所知,下载和子进程都在并行线程/进程中运行。

最佳答案

upload_file/upload_fileobj methods take care of the things you're looking for (i.e they wait for completion of object/file uploading).

我不建议第一个或第四个选项。也不需要使用 s3 waiter,因为 upload_file/upload_fileobj 方法仅在上传作业完成后返回。

请注意,upload_file/upload_fileobj 方法将自动处理读/写文件以及对大文件并行进行分段上传,因此无论文件大小如何,都无需使用分段上传。

关于python - Boto3:WAITINGS3流式上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42382693/

相关文章:

Python:检查单词中的所有字符是否以任何顺序存在于字符串中

python - 参数 'event' 值未使用

git - 即使在提供正确的远程缓存配置后,"dvc add -external S3://mybucket/data.csv"也因访问错误而失败

python - python 2.7.1 中的条件赋值语法错误(但不是 2.7.3 ?)仅发生在从 bash 运行时

amazon-web-services - 为什么不能使用提供的示例将 SSH 地形转换为 EC2 实例?

amazon-web-services - SSH 到 EC2 实例停止 OS Mojave

ruby-on-rails - 将 Rails + Puma + Postgres 应用程序部署到 Elastic beanstalk 的正确方法?

html - 是否可以为 iframe 设置 Origin Header?

java - 尝试将文件上传到 Amazon S3 时返回错误代码 400

python - Pandas 重采样 : forcing specific start time of time bars