3

PythonのAmazonS3から多数のファイル(比較的小さい10〜50kB)を取得する最も速い方法は何ですか?(200,000〜100万ファイルのオーダー)。

現在、botoを使用して署名付きURLを生成し、PyCURLを使用してファイルを1つずつ取得しています。

ある種の並行性は役に立ちますか?PyCurl.CurlMultiオブジェクト?

私はすべての提案を受け入れます。ありがとう!

4

6 に答える 6

2

私はPythonについて何も知りませんが、一般的には、タスクをより小さなチャンクに分割して、同時に実行できるようにする必要があります。ファイルの種類やアルファベット順などで分類し、分類の各部分に対して個別のスクリプトを実行できます。

于 2009-06-26T21:22:02.030 に答える
1

Python の場合、これは IO バウンドであるため、複数のスレッドが CPU を使用しますが、おそらく 1 つのコアしか使用しません。複数のコアがある場合は、新しいマルチプロセッサモジュールを検討することをお勧めします。それでも、各プロセスに複数のスレッドを使用させたい場合があります。プロセッサとスレッドの数を微調整する必要があります。

複数のスレッドを使用する場合、これはQueueクラスの良い候補です。

于 2009-06-26T21:50:34.173 に答える
0

各仕事は適切なツールで行うことができます:)

ストレステストS3にPythonを使用したいので、大量のダウンローダープログラムを見つけて、それにリンクを渡すことをお勧めします。

Windowsでは、ReGetプログラム(シェアウェア、 http: //reget.comから)をインストールし、COMインターフェイスを介してダウンロードタスクを作成した経験があります。

もちろん、使用可能なインターフェースを備えた他のプログラムが存在する可能性があります。

よろしく!

于 2009-07-05T23:25:12.973 に答える
0

スレッド+キューはどうですか、私はこの記事が大好きです:Pythonを使用した実用的なスレッドプログラミング

于 2009-06-26T22:42:24.240 に答える
0

私は S3 の作業のために twisted で txaws を使用してきましたが、認証された URL を取得して twisted.web.client.DownloadPage を使用するだけでよいでしょう (デフォルトでは、多くの操作なしでストリームからファイルに移動します)。

Twisted を使用すると、必要な並行性で簡単に実行できます。200,000 程度の場合は、おそらくジェネレーターを作成し、コオペレーターを使用して並行性を設定し、必要なすべてのダウンロード リクエストをジェネレーターに生成させるだけです。

ツイストに慣れていない場合は、モデルに慣れるまでに少し時間がかかることがわかりますが、それだけの価値があります。この場合、CPU とメモリのオーバーヘッドは最小限になると思いますが、ファイル記述子について心配する必要があります。より多くのファイル記述子が必要な場合や、複数の接続を使用してプルダウンしたい場合は、パースペクティブ ブローカーを組み合わせて複数のマシンにワークアウトするのは非常に簡単です。

于 2009-06-26T21:47:56.177 に答える