App Engine Pythonurlfetchのタイムアウト
-
29-10-2019 - |
質問
Restfulインターフェースと通信したいアプリエンジンアプリケーションのインスタンスが2つ実行されています。1つのデータが更新されると、2番目のWebフックを呼び出して、独自のシステムのデータの新しいコピーを取得します。 'site1'の中に私は持っています: ジェネラコディセタグプレ
「site2」のdata_updatedのハンドラー内にあります: ジェネラコディセタグプレ
2つのサイト間で渡されるデータはほとんどありませんが、次のエラーが発生します。期限を10秒に増やしてみましたが、それでも機能しません。 ジェネラコディセタグプレ
誰かが何が起こっているのかについての洞察を提供できますか?
ありがとう-リチャード
解決 2
メソッドの変更 から ジェネラコディセタグプレ
から ジェネラコディセタグプレ
締め切りエラーを修正しました。
締め切り からの応答を待つ最大時間 リモートホスト、秒数として。リモートホストがそうでない場合 この時間内に応答すると、DownloadErrorが発生します。
リクエストの待機に費やされた時間は、CPUクォータにカウントされません リクエストに対して。リクエストタイマーにカウントされます。アプリの場合 URLフェッチ呼び出しが戻る前に要求タイマーが期限切れになると、呼び出しは キャンセルされました。
リクエストハンドラの期限は最大60秒です。 タスクキューとcronジョブハンドラーの場合は10分。締め切りが なし、締め切りは5秒に設定されています。
他のヒント
App Engineのurlfetch
は、常に期待どおりに動作するとは限りません。URLを取得するのに約10秒かかります。フェッチしようとしているURLが稼働していると仮定すると、DeadlineExceededError
を呼び出し、from google.appengine.runtime import apiproxy_errors
を使用してtry / exceptブロック内でurlfetch呼び出しをラップすることでexcept apiproxy_errors.DeadlineExceededError:
をキャッチできるはずです。
関連する回答
curl
またはその他の方法でURL(www.site2.com/data_updatedおよびwww.site1.com/get_new_data)を手動でクエリして、制限時間内に応答していることを確認しましたか?転送する必要のあるデータの量が少ない場合でも、ハンドラーに問題があり、結果の返送が遅れている可能性があります。
転送されるデータの量はここでは問題ではなく、待ち時間は問題です。
話しているアプリの応答に10秒以上かかることが多い場合は、別のクラウドプラットフォーム(EC2など)で「プロキシコールバック」サーバーを使用する必要があります。しばらく待つことができる場合は、新しいバックエンドインスタンスは、urlfetchの時間制限をいくらか緩和することになっています。
平均応答時間が10秒未満で、失敗しているのが比較的少ない場合は、数回再試行してください。私はあなたのために呼び出しがべき等であることを願っています(つまり、再試行が悪影響を及ぼさないように)。そうでない場合は、独自のレイヤーを上にロールバックできる可能性があります。少し面倒ですが、問題なく機能します。これが私たちの仕事です。
J
GAEのドキュメントには、期限は60秒になる可能性があると記載されています: ジェネラコディセタグプレ