私は最初の GAE アプリケーションをビルドしてデバッグしようとしていますが、Stackoverflowers の素晴らしいサポートの恩恵を受けて、デフォルト キューでタスクを処理することで、現在の状況を把握しています。ありがとう!
ただし、キューを使用して、バックグラウンドで「長い」作業を行う方法を示したかったのです。私の考えは:
- 大きなファイルを処理する要求を受け取ります。
- ファイルを保存し、タスクをキューに入れます。
- 応答を返します。
- バックグラウンドでファイルを処理します。
- チャネルを介して、作業が完了したことをクライアントに知らせます。
私はこれをすべて機能させていますが、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')