私は最初のGAEアプリケーションをビルドしてデバッグしようとしていて、デフォルトのキューで処理されているタスクを取得するためにStackoverflowersの素晴らしいサポートを既に受けています。ありがとう!Google App EngineのチャネルとTaskQueues(クライアントのデバッグ)
しかし、バックグラウンドで「長い」作業を行う方法を示すために、キューを使用したかったのです。私の考えは:
- 大きいファイルを処理する要求を受け取りました。
- ファイルを格納してタスクをエンキューします。
- 応答を返します。
- ファイルをバックグラウンドで処理します。
- クライアントは、チャンネルを介して、作業が完了したことを知らせます!
私はこれすべてが問題なく動作しています。私の開発サーバーでは、タスクキューはバックグラウンドでタスクを処理していないようです。長時間の作業をシミュレートするために、私はそこで睡眠をとった。
def post(self):
time.sleep(60)
#use a channel to let the client know we're done
GAE開発サーバーはシングルスレッドであるようです。アイテムがキューから処理されるまではまったく応答しません。この仮定は正しいのでしょうか?何か案は?
おかげ
コードexanplesの追加:
#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')
コードの関連部分を投稿することはできますか? – systempuntoout
完了 - コードを追加しました。希望であれば十分です。 – ConfusedNoob