Python boto3.Bucket.upload_文件是阻塞还是非阻塞?

Python boto3.Bucket.upload_文件是阻塞还是非阻塞?,python,amazon-web-services,amazon-s3,boto3,Python,Amazon Web Services,Amazon S3,Boto3,是阻塞还是非阻塞 i、 e.如果我要运行以下程序 bucket = session.Bucket(bucket_name) bucket.upload_file(Key=s3_key, Filename=source_path) os.remove(source_path) 根据文件的大小,是否有竞争条件?或者上传保证在文件删除之前完成?无论是阻止还是取消阻止,当事情变得糟糕时,你不应该仅仅依靠API。如果由于任何原因上传失败在中间(例如,管理员在上传时决定重新启动路由器),则必须添加异常处理

是阻塞还是非阻塞

i、 e.如果我要运行以下程序

bucket = session.Bucket(bucket_name)
bucket.upload_file(Key=s3_key, Filename=source_path)
os.remove(source_path)

根据文件的大小,是否有竞争条件?或者上传保证在文件删除之前完成?

无论是阻止还是取消阻止,当事情变得糟糕时,你不应该仅仅依靠API。如果由于任何原因上传失败在中间(例如,管理员在上传时决定重新启动路由器),则必须添加异常处理。p> 将文件上载到S3的另一个良好实践是添加额外的元数据

bucket.upload_file(
     Key=s3_key, 
     Filename=source_path, 
     extra_args={'Metadata': {'source_path': source_path}}
) 

将事件添加到S3 Bucket以执行成功放置操作还允许您在上载成功但本地文件删除失败时创建清理过程。(假设文件被锁定或文件被授予只读访问权限)。

当前boto3
上载\u文件
被阻止。正如mootmoot所说,如果删除文件,您肯定应该实现一些安全的错误处理。

Boto3不支持异步调用,因此函数被阻塞

请参见此处有关async+boto3的对话:


我创建了一个异步对象,用于上传到S3并下载到您的计算机上。例如,为了确保文件在上传后被删除,您可以使用回调:
on\u success

请查看:


还有一些改进需要改进,但仍在发挥作用。

更好的措辞:“同步或异步”我最近对此进行了更详细的研究:为什么这与下面的答案完全相反?我们能得到一些确凿的证据吗?我的证据是,它是非阻塞的,因为我遵循上传循环,通过文件删除本地源文件。十分之一的情况下,由于找不到源文件,上载失败。是的,我可以对它进行防御性编码。但最好是明确地澄清这一点,以了解发生了什么。
bucket.upload_file(
     Key=s3_key, 
     Filename=source_path, 
     extra_args={'Metadata': {'source_path': source_path}}
)