Python Google App Engine中的通道和任务队列(客户端调试)

Python Google App Engine中的通道和任务队列(客户端调试),python,google-app-engine,task-queue,channel-api,Python,Google App Engine,Task Queue,Channel Api,我正在尝试构建和调试我的第一个GAE应用程序,并且已经从Stackoverflowers的强大支持中获益,从而在默认队列上处理任务。谢谢 然而,我想用队列来演示如何在后台进行一些“长”的工作。我的想法是: 接收处理大文件的请求 存储文件并将任务排入队列 返回响应 在后台处理文件 通过渠道让客户知道工作已经完成 除了一个问题,我所有这些都在工作。在我的开发服务器上,任务队列似乎不在后台处理任务。为了模拟长时间的工作,我在那里睡了一觉 def post(self): time.sleep(6

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

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

  • 接收处理大文件的请求
  • 存储文件并将任务排入队列
  • 返回响应
  • 在后台处理文件
  • 通过渠道让客户知道工作已经完成 除了一个问题,我所有这些都在工作。在我的开发服务器上,任务队列似乎不在后台处理任务。为了模拟长时间的工作,我在那里睡了一觉

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

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

    您可以发布代码的相关部分吗?完成-添加了代码。希望这就足够了。我已经用很多方法测试过了,但事实似乎并非如此。您确定它在完成排队项目之前返回吗?如果你是对的,那么我的通道示例应该可以工作(我应该注意,我已经尝试过更简单的设置)@ConfusedNoob Yes-任务是根据用户请求异步运行的。请注意,dev_appserver上的通道API使用轮询,而轮询请求在任务完成执行之前不会通过-也许这就是您观察到的原因?这将解释为什么整个场景无法正常工作,但这并不是为什么让任务排队60秒才能完成的原因……好吧,我已经对此进行了更多的研究,在我所有的实验中,让任务排队的页面似乎直到任务完成处理后才会响应。这甚至是在HTTP级别(通过跟踪工具)。只有在处理完任务后,响应才会开始返回。这感觉像是一个非常糟糕的开发故事-有什么解决方法或建议吗?@ConfusedNoob你确定你正在运行最新的SDK吗?如果我没记错的话,旧版本会执行类似的任务。尝试重新安装SDK。