Google App Engine中的频道和任务问题(客户端调试)

时间:2011-02-07 05:39:54

标签: python google-app-engine task-queue channel-api

我正在尝试构建和调试我的第一个GAE应用程序,并且已经从Stackoverflowers的强大支持中获益,以获得我在默认队列中处理任务的位置。谢谢!

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

  1. 收到处理大文件的请求。
  2. 存储文件并将任务排入队列。
  3. 返回回复。
  4. 在后台处理文件。
  5. 让客户通过频道知道工作已完成!
  6. 我有这一切,但有一个问题。在我的开发服务器上,任务队列似乎不在后台处理任务。为了模拟长时间的工作,我只是在那里睡了一会儿。

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

1 个答案:

答案 0 :(得分:2)

是的,App Engine dev_appserver是单线程的,一次只处理一个请求。但是,面向用户的请求应在开始处理任务队列请求之前返回。