ファイルをアップロードしようとすると、Google Drive REST API が 500: Internal Server Error を返すことがあります。これらのエラーのほとんどは、実際にはアップロードの成功に対応しています。Google の推奨に従ってアップロードを再試行し、後で重複を確認します。
これらのエラーを処理するための推奨される方法は何ですか?
ファイルをアップロードしようとすると、Google Drive REST API が 500: Internal Server Error を返すことがあります。これらのエラーのほとんどは、実際にはアップロードの成功に対応しています。Google の推奨に従ってアップロードを再試行し、後で重複を確認します。
これらのエラーを処理するための推奨される方法は何ですか?
Google のドキュメントは、これが内部エラーであり、修正できる特定のエラーではないことを示しているようです。彼らは、基本的に増加する間隔で関数を再試行する指数バックオフの使用を提案しています。
たとえば、関数は失敗します。2 秒待ってから、もう一度お試しください。それが失敗した場合は、4 秒待ちます。次に、8 秒、16 秒、32 秒などです。ギャップが大きいということは、サービスが正常に機能するまでの時間がどんどん長くなっていることを意味します。ただし、必要に応じて、停止するまでに最大 10 分間待機するように、最終的に時間を制限することができます。
パッケージには、このretrying
ための非常に優れた設定があります。再試行する必要がある関数のデコレータとしてfrom retrying import retry
使用できます。retry
これが私の例です:
@retry(wait_exponential_multiplier=1000, wait_exponential_max=60*1000, stop_max_delay=10*60*1000)
def find_file(name, parent=''):
...
@retry
デコレータを使用するには、関数宣言の前に置く必要があります。そのまま使用することもできretry()
ますが、タイミングの動作を調整するために渡すことができるオプションのパラメーターがあります。wait_exponential_multiplier
試行間の待機時間の増加を調整するために使用します。wait_exponential_max
試行間の待機に費やすことができる最大時間です。そしてstop_max_delay
、例外が発生する前に再試行に費やす時間です。すべての値はミリ秒単位です。
標準のエラー処理については、https ://developers.google.com/drive/handle-errors で説明しています。
ただし、500 エラーが発生することはありません。ログ情報を追加してください。Google でこの問題をデバッグできます。ありがとう。