3

https://developers.google.com/appengine/docs/python/config/cronによると、cronジョブは10分間実行できます。ただし、管理者としてサインインしているときにcronジョブのURLに移動してテストしようとすると、DeadlineExceededErrorでタイムアウトになります。これが約30秒で発生することがわかります。これは、リクエストのcron以外の制限です。通常の制限に対してcronルールでテストするために何か特別なことをする必要がありますか?

これが私がしていることです:

  • cronジョブのURLに移動します
  • これにより、pyスクリプトで単一の関数を呼び出すハンドラーが呼び出されます
  • この関数は、googleのクラウドSQLをデータベースで呼び出し、結果の行をループして、eBayのAPIを使用してデータを取得する各行で関数を呼び出します。
  • ebay api呼び出しからのデータは配列に格納され、すべての呼び出しが完了した後にすべてデータベースに書き戻されます。
  • ループが完了すると、データがデータベースに書き込まれ、ハンドラーに戻ります。
  • ハンドラーは完了メッセージを出力します

ループしているebayapi呼び出し中に常に問題が発生します。これは、ループ内で行わなければならない500のAPI呼び出しのようなものです。

なぜ私がこれのために完全な10分を得られないのか考えはありますか?

編集:役立つと思われる場合は実際のコードを投稿できますが、クエリを約60 apiに制限すると問題なく機能するため、コードのエラーではなく、間違ったプロセスであると想定しています。呼び出します。

4

2 に答える 2

10

GAEがcronジョブを実行する方法により、10分間実行できます。これはおそらく、ユーザーエージェント、IPアドレス、またはその他の方法をチェックすることによって行われます(私はここで推測しています)。アプリケーションでURLをヒットするようにcronジョブを設定したからといって、ブラウザからの標準のHTTPリクエストで10分間実行できるとは限りません。

ジョブが機能するかどうかをテストする方法は、制限のないローカル開発サーバーでテストすることです。または、cronジョブが実行されるまで待ち、ログにエラーがないか確認します。

お役に立てれば!

于 2012-10-22T02:12:37.120 に答える
1

例外を明確にして、それがurlfetchの問題であるかどうかを判断する方法は次のとおりです。例外が次の場合:

* google.appengine.runtime.DeadlineExceededError: raised if the overall request times out, typically after 60 seconds, or 10 minutes for task queue requests;
* google.appengine.runtime.apiproxy_errors.DeadlineExceededError: raised if an RPC exceeded its deadline. This is typically 5 seconds, but it is settable for some APIs using the 'deadline' option;
* google.appengine.api.urlfetch_errors.DeadlineExceededError: raised if the URLFetch times out.

次に、URLfetchの問題であるため、https: //developers.google.com/appengine/articles/deadlineexceedederrorsを参照してください。

タイムアウトするのがurlfetchの場合は、より長い期間(60秒など)を設定してみてください。

 result = urlfetch.fetch(url, deadline=60)
于 2012-10-22T02:37:54.727 に答える