PythonのAmazonS3から多数のファイル(比較的小さい10〜50kB)を取得する最も速い方法は何ですか?(200,000〜100万ファイルのオーダー)。
現在、botoを使用して署名付きURLを生成し、PyCURLを使用してファイルを1つずつ取得しています。
ある種の並行性は役に立ちますか?PyCurl.CurlMultiオブジェクト?
私はすべての提案を受け入れます。ありがとう!
PythonのAmazonS3から多数のファイル(比較的小さい10〜50kB)を取得する最も速い方法は何ですか?(200,000〜100万ファイルのオーダー)。
現在、botoを使用して署名付きURLを生成し、PyCURLを使用してファイルを1つずつ取得しています。
ある種の並行性は役に立ちますか?PyCurl.CurlMultiオブジェクト?
私はすべての提案を受け入れます。ありがとう!
私はPythonについて何も知りませんが、一般的には、タスクをより小さなチャンクに分割して、同時に実行できるようにする必要があります。ファイルの種類やアルファベット順などで分類し、分類の各部分に対して個別のスクリプトを実行できます。
各仕事は適切なツールで行うことができます:)
ストレステストS3にPythonを使用したいので、大量のダウンローダープログラムを見つけて、それにリンクを渡すことをお勧めします。
Windowsでは、ReGetプログラム(シェアウェア、 http: //reget.comから)をインストールし、COMインターフェイスを介してダウンロードタスクを作成した経験があります。
もちろん、使用可能なインターフェースを備えた他のプログラムが存在する可能性があります。
よろしく!
スレッド+キューはどうですか、私はこの記事が大好きです:Pythonを使用した実用的なスレッドプログラミング
私は S3 の作業のために twisted で txaws を使用してきましたが、認証された URL を取得して twisted.web.client.DownloadPage を使用するだけでよいでしょう (デフォルトでは、多くの操作なしでストリームからファイルに移動します)。
Twisted を使用すると、必要な並行性で簡単に実行できます。200,000 程度の場合は、おそらくジェネレーターを作成し、コオペレーターを使用して並行性を設定し、必要なすべてのダウンロード リクエストをジェネレーターに生成させるだけです。
ツイストに慣れていない場合は、モデルに慣れるまでに少し時間がかかることがわかりますが、それだけの価値があります。この場合、CPU とメモリのオーバーヘッドは最小限になると思いますが、ファイル記述子について心配する必要があります。より多くのファイル記述子が必要な場合や、複数の接続を使用してプルダウンしたい場合は、パースペクティブ ブローカーを組み合わせて複数のマシンにワークアウトするのは非常に簡単です。