boto3 apiを使用して2つの異なるアカウント間でバケットからキーをコピーしたいとします。 はboto3では、私は次のコードを実行され、コピーは基本的に私はGETからデータをフェッチし、別のアカウントに入れてそれを貼り付けています2つの異なる口座/接続間のboto3またはboto apiからのバケット/キーのパラレルコピー
source = boto3.client('s3')
destination = boto3.client('s3')
destination.put_object(source.get_object(Bucket='bucket', Key='key'))
を働きました。 boto APIの類似ライン上
、Iは、上記のコードは、任意のタイプのデータをコピーする目的を達成以下
source = S3Connection()
source_bucket = source.get_bucket('bucket')
source_key = Key(source_bucket, key_name)
destination = S3Connection()
destination_bucket = destination.get_bucket('bucket')
dist_key = Key(destination_bucket, source_key.key)
dist_key.set_contents_from_string(source_key.get_contents_as_string())
を行っています。 しかし、速度は本当に非常に遅いです。 1GBのデータをコピーするのに15-20秒ほどかかる。私は100GBプラスをコピーしなければなりません。 私は各スレッドがコピー操作を行うpythonのmutithreadingを試みました。 1GBのコピーに30秒かかったため、パフォーマンスが悪かった。私はGILがここで問題になるかもしれないと思う。 私はマルチプロセッシングを行いました.1GBファイルの場合、15-20秒の単一プロセスと同じ結果が得られました。
48コアと128GB RAMを備えた非常にハイエンドなサーバーを使用しています。私の環境でのネットワーク速度は10GBPSです。 検索結果のほとんどは、同じアカウントのバケット間でデータをコピーし、アカウント間でデータをコピーしないことを示します。誰も私をここで案内することができますか?私のアプローチは間違っていますか?誰かがより良い解決策を持っていますか?
提案をいただきありがとうございます。私は、アカウント間でデータを転送するためにboto3.upload_fileobj()を使用しました。 1GBファイルのコピーには17秒かかりました。 複数のプロセスでコードをまとめると、各プロセスのboto3.s3.transfer.TransferConfigでスレッド数が25に増えました。 1GBは9-10秒でコピーされました。 :) 私はTransferConfigパラメータで遊んでいます。うまくいけば1GBは5〜7秒でコピーされます。 乾杯 – bechkam7