如何使用boto在Amazon S3桶中高效地复制一个目录下的所有文件到另一个目录?
我需要把亚马逊S3存储桶里'/old/dir/'下的所有文件复制到'/new/dir/'。我写了一个脚本(算是临时解决方案):
import boto
s3 = boto.connect_s3()
thebucket = s3.get_bucket("bucketname")
keys = thebucket.list('/old/dir')
for k in keys:
newkeyname = '/new/dir' + k.name.partition('/old/dir')[2]
print 'new key name:', newkeyname
thebucket.copy_key(newkeyname, k.bucket.name, k.name)
现在这个脚本可以工作,但速度比我在图形管理界面里用鼠标复制粘贴要慢得多。这让我很沮丧,因为要复制的文件很多...
你知道有没有更快的方法吗?谢谢。
补充:也许我可以通过同时进行多个复制操作来加快速度。我对boto的复制方法不太熟悉,也不知道可以同时发送多少个操作给亚马逊。
补充2:我现在正在学习Python的多进程处理。看看我能不能同时发送50个复制操作...
补充3:我尝试用Python的多进程模块同时进行30个复制操作。这个速度比在控制台里快多了,而且出错的可能性也小了。不过遇到了一个新问题,就是大文件(超过5GB)时,boto会抛出异常。我需要先调试这个问题,再发布更新的脚本。