我希望GAE在我的应用发送回复后执行其他操作。
处理程序看起来像这样:
class FooHandler(webapp.RequestHandler):
def post(self):
self.response.out.write('Bar')
send_response() # this is where I need help!
do_something_else() # at this point, the response should have been sent
如果您想知道我为什么要这样做:
我需要类似线程的行为,这是GAE的沙盒环境所不允许的。因此,一个函数发送几个请求,而不关心响应。每个请求都会启动一个耗时的操作(获取资源)并将结果保存到数据存储区中,第一个函数可以使用它。
注意:请求处理程序具有以发送响应。如果你没有提供任何,它将等待 post 函数完成然后返回默认标题(当然这不是我正在寻找的行为)
如果这有帮助,解决方案可能是使用自定义wsgi middeleware,但我不知道它是如何工作的(还)...
答案 0 :(得分:9)
也许您可以使用Task Queues。
答案 1 :(得分:2)
如前所述,您可以使用task queues或deferred API。 Rafe Kaplan在其this talk here部分的末尾概述了另一个选项:您可以使用结果挂钩函数执行异步API调用来处理结果,并在调用结束时调用结果挂钩,< em>在之后将响应返回给用户!
答案 2 :(得分:1)
假设您有权访问WSGI层,您可以包装WSGI应用程序并提供一个响应发送后执行的回调。有关如何执行此操作,请参阅:
http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode
虽然这是来自mod_wsgi文档,但请求示例末尾的清理应该适用于任何符合WSGI的堆栈。
答案 3 :(得分:-1)
当RequestHandler返回时,如果您确实需要线程,则无法GAE发送它的响应,您需要在另一个托管公司编写您的Web应用程序。