2

一旦我的应用程序发送了响应,我希望 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

4 回答 4

9

也许您可以使用Task Queues

于 2010-01-15T05:57:19.477 回答
2

如前所述,您可以使用任务队列延迟 API。Rafe Kaplan 在本次演讲的最后部分概述了另一种选择:您可以使用结果挂钩函数执行异步 API 调用来处理结果,并在调用完成时调用结果挂钩,响应之后返还给用户!

于 2010-01-19T12:15:22.197 回答
1

假设您可以访问 WSGI 层,您可以包装 WSGI 应用程序并提供一个回调,以便在发送响应后执行。有关如何执行此操作,请参阅:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

尽管这是来自 mod_wsgi 文档,但请求示例末尾的清理应该适用于任何 WSGI 兼容堆栈。

于 2010-01-15T05:49:51.877 回答
-1

如果您确实需要在另一家托管公司编写 Web 应用程序所需的线程,则当 RequestHandler 返回时,您无法 GAE 发送它的响应。

于 2010-01-15T05:57:03.497 回答