我想要删除许多s3中的文件。 我计划使用一个multiprocessing.Pool
来执行所有这些删除操作,但我不确定如何在作业之间保持s3.client
的活动状态。 我希望做到这样的事情:
import boto3
import multiprocessing as mp
def work(key):
s3_client = boto3.client('s3')
s3_client.delete_object(Bucket='bucket', Key=key)
with mp.Pool() as pool:
pool.map(work, lazy_iterator_of_billion_keys)
但这样做的问题是,在每个作业的开始都要花费大量的时间来执行
s3_client = boto3.client('s3')
。 文档建议为每个进程创建一个新的资源实例,因此我需要一种方法为每个进程创建一个s3客户端。是否有任何方法可以为池中的每个进程创建持久的s3客户端或缓存客户端?
此外,我计划通过发送密钥批次并使用
s3_client.delete_objects
来优化删除操作,但为了简单起见,在我的示例中使用了s3_client.delete_object
。