0

GAE-Python に関する私の Web サイトには、ユーザーがボタンをクリックしたときに ajax リクエストによって呼び出される Evolutionary Optimization Algorithm を使用して数学を計算する機能があります。通常、各リクエストは計算を完了するのに非常に長い時間がかかります。

xhr.abort()サーバー側で計算を停止しないajaxの機能を使用するのではなく、サーバーに現在のリクエストをキャンセルするように指示する何らかの方法(ajaxまたはその他の方法)が必要です。

初期の試みとして、GAE にはリクエスト タイマーがあり、リクエストのDeadlineExceededError完了に時間がかかりすぎる場合にランタイムによって発生することがわかりました。

この考えに基づいて、サーバーにシグナルを送信して、ランタイムにリクエストの割り込みをトリガーさせる方法があるかどうかを尋ねたいと思いますか?

4

1 に答える 1

0

長時間実行されるタスクをハンドラーで同期的に実行しようとしないでくださいこれは、タスク キューの最適な候補です。Ajax リクエストは単にタスクをキューにプッシュする必要があり、App Engine はそれをオフラインで処理します。タスクには 10 分のタイムアウトがあります。

memcache またはデータストアを使用して、Ajax コードとの間で情報をやり取りできます。たとえば、タスク ハンドラーは、「stop_processing_FOO」キー (FOO は、タスクが最初にトリガーされたときに Ajax によって生成される一意の ID) の存在について数秒ごとに memcache をチェックでき、「キャンセル」ボタンは、そのキーを memcache に挿入するハンドラ。

同様に、タスクが終了すると、関連付けられた値を持つ 'finished_processing_FOO' キーを memcache に入れることができます。Ajax は、そのキーが存在するかどうかをチェックするハンドラーを定期的にポーリングし、存在する場合は値を返すことができます。

于 2013-07-09T08:37:03.467 に答える