I'm trying to build and debug my first GAE application and have already benefited from the awesome support of Stackoverflowers to get where I am in having tasks being processed on the default queue. Thanks!
However, I wanted to use Queues to demonstrate how you would do some 'long' work in the background. My idea was:
- Receive a request to process a large file.
- Store the file and enqueue a task.
- Return the response.
- Process the file on the background.
- Let the client know, via a Channel, that the work is done!
I have all this working but for one problem. On my development server the Task Queue doesn't seem to process tasks in the background. To simulate long running work I just popped a sleep in there.
def post(self):
time.sleep(60)
#use a channel to let the client know we're done
It appears that the GAE development server is single threaded. It doesn't respond at all until the item has been processed off the queue? Is this assumption right? Any ideas?
Thanks
Adding code 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'开发者_如何学Python)
Yes, the App Engine dev_appserver is single-threaded, and only processes a single request at a time. Your user-facing request should return before it begins processing the task queue request, however.
精彩评论