gpt4 book ai didi

python - Boto3:WAITINGS3流式上传完成

转载 作者:太空宇宙 更新时间:2023-11-03 10:55:04 24 4
gpt4 key购买 nike

我使用 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/

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