我正在使用
从文档中没有明显的方法来等待传输完成,但有一些提示可以工作:
编辑 如果发现
S3.Client.upload_fileobj()
,并使用BytesIO
流作为输入,从流上传文件到S3。我的函数在上传完成之前不应该返回,因此我需要一种等待的方式。从文档中没有明显的方法来等待传输完成,但有一些提示可以工作:
- 使用回调参数等待进度达到100%。在Javascript中,使用回调或承诺将是微不足道的,但在Python中我不确定。
- 使用
S3.Waiter
对象检查对象是否存在。但它通过每5秒轮询来进行检查,并且似乎非常低效。另外,我不确定它是否会等到对象完成。 - 有一个类
S3.MultipartUpload
,其中包含一个.complete()
方法,但我怀疑它是否能实现我的要求。 - 做一个循环,检查对象是否完全上传,如果没有,则睡一会儿。但是如何检查对象是否完成?
upload_fileobj()
是相当新的)。编辑 如果发现
S3.Client.put_object
也接受类似文件的对象,并阻止直到服务器响应。但是,与流结合使用会起作用吗?我不确定Python多线程在这里如何工作。流最初来自S3.Client.download_fileobj()
,通过subprocess.Popen()
进行传输,然后应该重新上传到S3。据我所知,下载和子进程都在并行线程/进程中运行。
upload_fileobj
实际上从传输管理器获取一个future
,然后等待其完成,所以你是对的!一旦方法返回,上传就完成了。这对我帮助很大!如果你能编辑你的回答更简洁明确一些,我会接受它。谢谢! - cpury