0

我需要 Pyramid 中的回调,该回调将在发送响应并关闭与客户端的连接后执行。

我知道完成的回调。然而,这不是我想要的。在连接关闭之前评估完成的回调(据我所知)。

有什么线索吗?我需要它来发送电子邮件而不会造成几秒钟的延迟。通常我应该使用像芹菜这样的东西,我猜。但是,我买不起 Heroku 的后台工作人员。

4

1 回答 1

2

我的理解是,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),我会考虑拥有一个后台线程,每隔几秒从队列中读取数据并发送电子邮件。然后您的视图代码只是将数据放入队列并愉快地返回,而工作线程则发送电子邮件。

于 2013-01-11T20:09:32.607 回答