Python Google App Engine中的通道和任务队列(客户端调试)
我正在尝试构建和调试我的第一个GAE应用程序,并且已经从Stackoverflowers的强大支持中获益,从而在默认队列上处理任务。谢谢 然而,我想用队列来演示如何在后台进行一些“长”的工作。我的想法是: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
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。