我需要 Pyramid 中的回调,该回调将在发送响应并关闭与客户端的连接后执行。
我知道完成的回调。然而,这不是我想要的。在连接关闭之前评估完成的回调(据我所知)。
有什么线索吗?我需要它来发送电子邮件而不会造成几秒钟的延迟。通常我应该使用像芹菜这样的东西,我猜。但是,我买不起 Heroku 的后台工作人员。
我的理解是,WSGI 应用程序基本上是一个 Python 函数,它接收一组参数并返回代表 HTTP 响应的文本块。该 blob 可能会传递给 WSGI 管道中的一些过滤器,这些过滤器也只是函数,之后 Web 服务器将响应发送给客户端并关闭连接。来自维基百科的文章:
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
yield 'Hello World\n'
由于 Pyramid 是一个 WSGI 应用程序,您可以看到连接关闭之类的事情很可能发生在其影响范围之外。
在您的情况下,如果您不能/不想使用现有解决方案(如 Chris McDonough 所建议的那样,处于队列模式的 pyramid_mailer),我会考虑拥有一个后台线程,每隔几秒从队列中读取数据并发送电子邮件。然后您的视图代码只是将数据放入队列并愉快地返回,而工作线程则发送电子邮件。