在Pylons中,如何在编写响应后执行操作?

时间:2010-05-25 19:46:11

标签: python pylons

在pylons控制器中,我想首先返回对请求的响应(以便用户尽快获得响应),然后执行一些其他操作(例如,更新视图计数等)需要碰巧生成响应。做这样的事情的最佳做法是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

在大多数基于wsgi的服务器上(比如标准的wsgiref,nwsgi等),有一种方法可以将身体的某些部分发送出更多的工作并发送更多。我猜“发送更多”是可选的。

使用yield而不是return。 WSGI示例(不确定它是否能很好地转换为Pylons):

def application(environ, start_response):
    start_response('200 OK', [('Content-type','text/plain')])
    yield 'body starts. You should see this in browser already'
    # do something
    yield 'some more of body'

一旦请求处理程序用完了代码就会运行,它会关闭连接。

现在,这肯定适用于我尝试的标准wsgi服务器。我想知道这是否适用于Pylons。

答案 1 :(得分:0)

我还没有机会尝试使用Python线程,但你可以这样做:

def controller_method(self):
    # controller logic here
    html = render('/template.mako')
    # start a thread here
    return html

通过在所有逻辑之后启动线程,但在返回之前,应该避免线程之间的冲突。

您可能还会看看RabbitMQ或其他消息排队软件。您可以通过将队列中的作业发送来卸载主Web应用程序。