2012-02-12 18 views
4

私のアプリケーションでは長いタスクがあるので、小さなタスクに分割しました。これらのn個のタスクが完了すると、別のタスクが実行され、それらのn個のタスクの結果に依存します。この依存関係をTask APIでどうやって達成するのですか?他のn個のタスクの後に1つのタスクを実行する。Google App Engine - タスクの依存関係

+0

あなたに似た質問が見つかりました。 http://stackoverflow.com/questions/4224564/calling-a-script-after-tasks-queue-is-empty – jftsai

答えて

1

私はこの問題を解決できる2つの方法があると思います。 タスクTDがn他のタスクTAに依存し、各タスクはTA自体が最後のものである場合、それはチェックし、完了すると、キュー・Q.

  1. プッシュN TAタスクがキューQにであると仮定しますTAがキューQの最後のタスクである場合、それはQをキューに入れる。

  2. n個のTAタスクをプッシュし、Qをキューに入れる.TDが実行されると、すべてのTAタスクが終了するかどうかをチェックする。未完了のTAがある場合、TDは200-299の範囲外のHTTPステータスコードを返すことによって実行をキャンセルします。

、これらの方法の鍵は、私が試していないが、キューQにタスクの数を取得することで、私はPythonのAPIは、特定のキューのタスクキューリソースを取得するための実験的な方法を提供している知っています。 stats.totalTask​​sプロパティは、キュー内のキューの総数です。

http://code.google.com/intl/en/appengine/docs/python/taskqueue/rest.html

1

GAE Pipeline APIに見てみましょう参照してください、あなたが説明したような複雑なタスクのワークフローを構築するために使用されます。

0

さらに別の方法として、すべてのタスクをキューに追加する方法があります。完了時にN個の初期タスクでデータストアにログ情報を記録させ、データストアにすべてのデータストアが実行されているかどうかを照会できるようにします。
依存タスクが実行されると、このデータストアクエリが実行され、条件が満たされているかどうかが確認されます(すべての初期タスクが終了したことを確認します)。そうでない場合は、後で実行する必要があります。
これを達成するために、従属タスクは、ある一定の時間間隔の後に実行するようにスケジューリングされた自身のコピーをキューに追加することができます。代わりに(上記の回答のように)、従属タスクはエラーステータスコードで終了する可能性があります。この場合、キューまたはタスクのretry_limitが超えられていない限り、自動的に後で再試行されます。

関連する問題