2

私は最初の GAE アプリケーションをビルドしてデバッグしようとしていますが、Stackoverflowers の素晴らしいサポートの恩恵を受けて、デフォルト キューでタスクを処理することで、現在の状況を把握しています。ありがとう!

ただし、キューを使用して、バックグラウンドで「長い」作業を行う方法を示したかったのです。私の考えは:

  1. 大きなファイルを処理する要求を受け取ります。
  2. ファイルを保存し、タスクをキューに入れます。
  3. 応答を返します。
  4. バックグラウンドでファイルを処理します。
  5. チャネルを介して、作業が完了したことをクライアントに知らせます。

私はこれをすべて機能させていますが、1つの問題があります。私の開発サーバーでは、タスク キューがバックグラウンドでタスクを処理していないようです。長時間実行される作業をシミュレートするために、そこにスリープを入れました。

def post(self):
    time.sleep(60)
    #use a channel to let the client know we're done

GAE 開発サーバーはシングル スレッドのようです。アイテムがキューから処理されるまで、まったく応答しませんか? この仮定は正しいですか?何か案は?

ありがとう

コード例の追加:

#code to enqueue task
taskqueue.add(url='/processSubmission', params={'key': activity.key() }, transactional=False)

#class that processes queued work
class ProcessSubmission(webapp.RequestHandler):
  def post (self):
    time.sleep(60)
    activity = db.get(db.Key(encoded=self.request.get('key')))
    activity.approved = True
    activity.put()
    channel.send_message(activity.userid, 'Wahoo! we are done')
4

1 に答える 1

2

はい、App Engine dev_appserver はシングル スレッドであり、一度に 1 つのリクエストしか処理しません。ただし、ユーザー向けのリクエストは、タスク キュー リクエストの処理を開始する前に返される必要があります。

于 2011-02-07T22:36:10.683 に答える