web-dev-qa-db-ja.com

Google AppEngine-タスクキューとcronジョブ

最新のGoogleApp Engineリリースは、Pythonで新しい Task Queue API をサポートしています。このAPIの機能を既存の cronサービス と比較していました。 RSSフィードを取得して毎日の間隔で解析するなど、ユーザーが開始しないバックグラウンドジョブの場合。 Task Queue APIは、このようなユーザーが開始しないリクエストに使用できますか?

49
mshafrir

私は「一種の」と言うでしょう。タスクキューについて覚えておくべきことは次のとおりです。

1)1分/時間/日あたりの操作の制限は、一定の間隔で何かを繰り返すことと同じではありません。トークンバケットのサイズを1に設定しても、これらの繰り返しが等間隔になるとは限りません。キューがトークンバケットとして実装されていると彼らが言うときの深刻さ、およびそのステートメントがインターフェイスの保証された部分であると想定されているかどうかによって異なります。これはラボであり、まだ何も保証されていません。

2)タスクが失敗した場合、タスクは再キューイングされます。 cronジョブが失敗した場合、ログに記録され、再度期限が切れるまで再試行されません。したがって、cronジョブは、それ自体のコピーを追加してからフィードを更新するタスクとしても、フィードを更新してからそれ自体のコピーを追加するタスクとしても同じように動作しません。

タスクを使用してcronジョブをモックアップすることは可能かもしれませんが、それだけの価値があるとは思えません。実行に30秒以上かかる(または他のリクエスト制限に達する)cronジョブを回避しようとしている場合は、作業を分割して、すべての部分をに追加するcronジョブを作成できます。タスクキュー。 RSSフィードを更新するための究極の最良の方法である可能性がある非同期urlfetchについて(GAEブログで?)いくつかの話がありました。

24
Steve Jessop

Google I/Oのビデオで説明されるまで、違いをよく理解できませんでした。通常、公式の情報源が最適です。

youtubeビデオ

プレゼンテーションからのスライド

15
mcotton

私の見方では、RSSフィードを1つだけ解析している場合は、Cronジョブで十分かもしれません。ユーザーまたはその他のシステム変数によって実行時に指定されたX個のRSSフィードを解析する必要がある場合は、毎回タスクを選択します。

これは、過去にユーザー定義のTwitter検索を定期的に実行する必要があり、Cronジョブを使用して、実行する必要のあるリクエストを実行するための非常に悪いキューイングシステムを作成しなくなったためです。それは役に立ちませんでした。cronジョブの最小間隔はわずか1分です(1日の分よりも多くの検索を実行しました)。

タスクの優れた点は、ETAを与えることができることです。したがって、これを47秒後に実行するか、12:30に実行するかを指定できます。

5
Kinlan