0

Pythonを使用してGAEアプリケーションを開発していますが、リクエストを同時に処理したいと考えています。この効果のために、私はスレッドセーフtrueに設定しました。リクエストハンドラで2つのメソッドを定義しました。

POST-プルタスクをエンキューして非同期で実行し、後でそれ自体がプルタスクを応答としてエンキューします。

def post(self):
    message = self.request.body
    taskqueue.add(url='/process', params={'message': message}) #this task will enqueue a pull task as a response

GET-プルタスクキューをポーリングして、使用可能な応答が見つかるまで応答を確認します(ループを改善する方法を見つける必要があることはわかっていますが、試しているだけです)。

def get(self):
    (...)
    tasks = queue.lease_tasks_by_tag(1, 100, tag)
    while tasks.__len__() == 0:
        time.sleep(1)
        tasks = queue.lease_tasks_by_tag(1, 100, tag) 

クライアントアプリケーションはPOSTを呼び出してからGETを呼び出します。POSTメソッドによってキューに入れられたタスクにブレークポイントを設定しましたが、ループでリクエストハンドラーがスタックしている間は、ブレークポイントが呼び出されることはありません。アプリケーションは複数のスレッドでリクエストを処理することになっていると思いましたが、なぜプッシュリクエストハンドラーを同時に実行しないのでしょうか。これについて助けていただければ幸いです。

4

1 に答える 1

1

一度に複数のリクエストを処理できない開発サーバーからの質問で説明されているような動作が見られているのではないかと思います。したがって、ブレークポイントを POST メソッドに配置すると、開発サーバーは効果的に一時停止します。この動作を意図したとおりに確認するには、App Engine にアップロードします。

さらに、GET HTTP リクエストを使用してポーリングする代わりに、App Engines Channel APIを使用してみてください。これを使用すると、タスク キュー ハンドラーから直接クライアントに応答をプッシュして、プロセスが完了したこと (または何でも) を通知できます。

于 2012-11-25T16:22:34.920 に答える