*在Google App Engine中处理请求后执行操作*

时间:2010-01-15 05:38:59

标签: python google-app-engine wsgi

我希望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,但我不知道它是如何工作的(还)...

4 个答案:

答案 0 :(得分:9)

也许您可以使用Task Queues

答案 1 :(得分:2)

如前所述,您可以使用task queuesdeferred 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应用程序。