2011-02-07 93 views
2

我正在尝试构建和调试我的第一个GAE应用程序,并且已经从Stackoverflowers的真棒支持中获益,以获取我在默认队列上处理任务的位置。谢谢!Google App Engine中的通道和TaskQueue(客户端调试)

但是,我想使用队列来演示如何在后台执行一些“长期”工作。我的想法是:

  1. 接收处理大文件的请求。
  2. 存储文件并排入任务。
  3. 返回响应。
  4. 在后台处理文件。
  5. 让客户通过渠道知道工作已经完成!

我有这一切工作,但一个问题。在我的开发服务器上,任务队列似乎不在后台处理任务。为了模拟长时间运行的工作,我刚刚在那里弹出睡眠。

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') 
+0

你可以发布你的代码的相关部分? – systempuntoout 2011-02-07 08:11:45

+0

完成 - 添加了代码。希望就够了。 – ConfusedNoob 2011-02-07 18:14:09

回答

2

是的,应用程序引擎dev_appserver是单线程的,并且仅一次处理单个请求。但是,您的面向用户的请求应在开始处理任务队列请求之前返回。

相关问题