Python Boto3:等待S3流媒体上传完成

Python Boto3:等待S3流媒体上传完成,python,amazon-web-services,amazon-s3,boto,boto3,Python,Amazon Web Services,Amazon S3,Boto,Boto3,我使用S3.Client.upload\u fileobj()和BytesIO流作为输入,从流将文件上载到S3。在上传完成之前,我的函数不应该返回,因此我需要一种等待方式。 从文档中看,没有明显的方法可以等待传输完成,但有一些提示可以说明什么是可行的: 使用回调参数等待进度达到100%。在Javascript中,使用回调或承诺是很简单的,但在Python中我不太确定 使用检查对象是否存在的S3.water对象。但它是通过每5秒进行一次投票来实现的,而且似乎非常无效。我也不确定它是否会等到对象完成

我使用
S3.Client.upload\u fileobj()
BytesIO
流作为输入,从流将文件上载到S3。在上传完成之前,我的函数不应该返回,因此我需要一种等待方式。

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

  • 使用回调参数等待进度达到100%。在Javascript中,使用回调或承诺是很简单的,但在Python中我不太确定
  • 使用检查对象是否存在的S3.water对象。但它是通过每5秒进行一次投票来实现的,而且似乎非常无效。我也不确定它是否会等到对象完成
  • 有一个带有
    .complete()
    方法的类
    S3.MultipartUpload,但我怀疑这是否符合我的要求
  • 执行循环,检查对象是否已完全上载,如果未上载,则休眠一段时间。但是如何检查对象是否完整
  • 我一直在谷歌上搜索,但似乎没有人问同样的问题。此外,大多数讨论相关问题的结果都使用了不同的API(我认为
    upload\u fileobj()
    是相当新的)

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

    upload_file/upload_fileobj方法处理您正在查找的内容(即,它们等待对象/文件上传完成)

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


    请注意,upload_file/upload_fileobj方法将自动处理读取/写入文件以及并行执行大文件的多部分上载,因此无需使用多部分上载,无论文件大小。

    谢谢,文卡特什。所以,你的回答实际上并没有直接回答我的问题,但仍然有帮助。从您的代码判断,我看到您假设当方法返回时,上传就完成了。起初我对此表示怀疑,但随后检查了源代码。事实证明,
    upload\u fileobj
    实际上从转会经理那里得到了一个
    future
    ,然后等待它的完成,所以你是对的!一旦方法返回,上传就完成了。这很有帮助!如果你能把你的答案编辑得更简洁明了,我会接受的。谢谢@很高兴知道我的回答在某种程度上帮助了你!我很高兴你发现/意识到我想要传达的内容。我编辑了我的答案,使之更加简洁明了。我希望你现在能接受。注:发布现成代码/示例代码的唯一原因是“它将通过尝试为您澄清疑问,您可以自己看到结果”,尽管发布整个代码是没有必要的。