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。在上传完成之前,我的函数不应该返回,因此我需要一种等待方式。
从文档中看,没有明显的方法可以等待传输完成,但有一些提示可以说明什么是可行的:
.complete()
方法的类S3.MultipartUpload
,但我怀疑这是否符合我的要求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
,然后等待它的完成,所以你是对的!一旦方法返回,上传就完成了。这很有帮助!如果你能把你的答案编辑得更简洁明了,我会接受的。谢谢@很高兴知道我的回答在某种程度上帮助了你!我很高兴你发现/意识到我想要传达的内容。我编辑了我的答案,使之更加简洁明了。我希望你现在能接受。注:发布现成代码/示例代码的唯一原因是“它将通过尝试为您澄清疑问,您可以自己看到结果”,尽管发布整个代码是没有必要的。