BOTO3 S3的copy操作是阻塞还是非阻塞?复制时能否添加目标对象元数据?
Boto3 S3 copy操作问题解答
阻塞/非阻塞属性说明
Boto3 S3的copy方法默认属于阻塞类型:调用该方法后,当前线程会等待整个对象复制流程完全完成(或抛出异常)后才会返回结果,不会提前释放线程执行其他逻辑。
哪怕是大于5GB的大对象,copy方法自动触发分片复制逻辑时,也依然保持阻塞特性,需要等全部分片复制、校验完成才会返回。如果需要非阻塞的异步复制能力,可以自行封装任务队列处理复制流程,或是调用底层异步接口实现。
复制时添加自定义元数据的说明
可以在复制操作执行时为目标对象额外添加自定义元数据,需要遵循对应的配置规则:
- 默认状态下
copy操作会直接复用源对象的全部元数据,不支持直接追加自定义字段 - 若要自定义目标对象元数据,需要额外指定
MetadataDirective参数为REPLACE,同时在ExtraArgs参数中传入完整的元数据配置(可包含从源对象读取后保留的元数据+新增的自定义元数据)
参考代码示例:
import boto3 s3_client = boto3.client('s3') # 定义源对象信息 copy_source = { 'Bucket': 'your-source-bucket', 'Key': 'your-source-object-key' } # 执行复制并添加自定义元数据 s3_client.copy( CopySource=copy_source, Bucket='your-destination-bucket', Key='your-destination-object-key', ExtraArgs={ 'Metadata': { 'custom-field-1': 'custom-value-1', 'custom-field-2': 'custom-value-2' }, 'MetadataDirective': 'REPLACE' } )
内容的提问来源于stack exchange,提问作者Minuddin Ahmed Rana
相关产品推荐
相关产品推荐

