Google App Engine中的通道和任务队列(客户端调试)
我正在尝试构建和调试我的第一个GAE应用程序,已经得到了Stackoverflow上很多朋友的帮助,才让我的任务能够在默认队列中处理。谢谢大家!
不过,我想利用队列来演示如何在后台处理一些“长时间”的工作。我的想法是:
- 接收一个请求来处理一个大文件。
- 存储这个文件并将一个任务放入队列。
- 返回响应给用户。
- 在后台处理这个文件。
- 通过一个频道通知客户端,工作完成了!
我已经把这些都搞定了,但有一个问题。在我的开发服务器上,任务队列似乎没有在后台处理任务。为了模拟长时间运行的工作,我在里面加了一个睡眠函数。
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')
1 个回答
2
是的,App Engine的dev_appserver是单线程的,也就是说它一次只能处理一个请求。在处理任务队列的请求之前,你的用户请求应该先返回结果。