我需要將所有檔案從 S3 中的一個前綴復制到同一存盤桶中的另一個前綴。我的解決方案是這樣的:
file_list = [List of files in first prefix]
for file in file_list:
copy_source = {'Bucket': my_bucket, 'Key': file}
s3_client.copy(copy_source, my_bucket, new_prefix)
但是我只移動了 200 個小檔案(每個 1 kb),這個程序最多需要 30 秒。一定有可能做得更快嗎?
uj5u.com熱心網友回復:
我會并行執行。例如:
from multiprocessing import Pool
file_list = [List of files in first prefix]
print(objects_to_download)
def s3_coppier(s3_file):
copy_source = {'Bucket': my_bucket, 'Key': s3_file}
s3_client.copy(copy_source, my_bucket, new_prefix)
# copy 5 objects at the same time
with Pool(5) as p:
p.map(s3_coppier, file_list)
uj5u.com熱心網友回復:
所以你有一個函式需要呼叫一堆東西,所有這些東西都是相互獨立的。您可以嘗試多處理。
from multiprocessing import Process
def copy_file(file_name, my_bucket):
copy_source = {'Bucket': my_bucket, 'Key': file_name}
s3_client.copy(copy_source, my_bucket, new_prefix)
def main():
file_list = [...]
for file_name in file_list:
p = Process(target=copy_file, args=[file_name, my_bucket])
p.start()
然后它們都可以(大約)同時開始,而不必等待最后一個檔案完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318815.html
標籤:Python 亚马逊网络服务 亚马逊-s3 boto3
上一篇:Java不等待異步呼叫回應
下一篇:S3從存盤桶下載多個檔案
