1

当且仅当客户端成功完成我使用 Tornado 提供的文件的下载时,我希望能够运行一些清理功能。

我安装了 firefox 油门工具,让它将连接速度降低到拨号速度,并安装了这个处理程序来生成一堆垃圾随机文本:

class CrapHandler(BaseHandler):
    def get(self, token):
        crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000))
        self.write(crap)
        print "done"

发出请求后,我立即从龙卷风得到以下输出:

done
I 100524 19:45:45 web:772] 200 GET /123 (192.168.45.108) 195.10ms

然后客户端缓慢下载大约 20 秒。我希望它会在客户端完成后打印“完成”。

此外,如果我执行以下操作,我会得到几乎相同的结果:

class CrapHandler(BaseHandler):
    @tornado.web.asynchronous
    def get(self, token):
        crap = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(100000))
        self.write(crap)
        self.finish()
        print "done"

我在这里错过了一些基本的东西吗?龙卷风甚至可以支持我正在尝试做的事情吗?如果没有,是否有替代方案?

4

1 回答 1

1

我相信您正在寻找在on_connection_close您可以覆盖的请求处理程序方法中运行的东西。

请记住,如果你在 nginx 后面运行,tornado 会立即响应 nginx,而 nginx 会慢慢响应客户端。

另外,请记住,添加@tornado.web.asynchronous实际上并不会使请求异步。它只设置使用的请求tornado.http.AsyncHTTPClient

于 2010-05-28T07:48:26.527 回答