1

S3 からローカル ドライブの一時的な場所にファイルをダウンロードして処理する Python 関数があります。ダウンロード部分は次のようになります。

 def processNewDataFile(key):

     ## templocation below is just some temp local path
     key.get_contents_to_filename(templocation)
     ## further processing

keyダウンロードするファイルの AWS キーは次のとおりです。私が気づいたのは、時々get_contents_to_filenameフリーズするように見えることです。私のコードの他の部分では、これらのブロックが指定された時間内に完了しない場合、コードのブロックを中断する (そして例外を発生させる) いくつかのソリューションがあります。ダウンロードする必要があるファイルのサイズはさまざまであり、S3 の応答が他の時間よりも遅い場合があるため、このソリューションをここで使用するのは困難です。

get_contents_to_filenameそれで、事前に決められた厳しい時間制限を伴わない、中断/タイムアウトの信頼できる方法はありますか?

ありがとう

4

1 に答える 1

0

コールバック関数を使用できますget_contents_to_filename

http://boto.cloudhackers.com/en/latest/ref/gs.html#boto.gs.key.Key.get_contents_to_file

コールバック関数には、送信バイト数とファイルの合計サイズの 2 つのパラメーターが必要です。粒度 (コールバックが呼び出される最大回数) も指定できますが、私は小さなファイル (10kb 未満) でのみ使用しており、通常は開始時に 1 回、終了時に 1 回しか呼び出されません。

重要なことは、転送の開始時にファイルのサイズをコールバック関数に渡すことです。これにより、ファイルのサイズに基づいてタイマーが開始されます。

于 2013-01-29T17:43:20.540 に答える