如何在客户端完成从Tornado web服务器下载后调用函数?
我想在客户端成功下载我用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"
在我发出请求后,Tornado立刻给我输出了以下内容:
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"
我是不是漏掉了什么基本的东西?Tornado能支持我想做的事情吗?如果不行,有没有其他的办法可以做到?
1 个回答
1
我想你是在找一个可以在on_connection_close
这个请求处理方法中运行的东西,你可以对它进行重写。
要记住,如果你是在nginx后面运行的,tornado会立即对nginx做出响应,而nginx会慢慢地对客户端做出响应。
另外,记住添加@tornado.web.asynchronous
并不会真正让请求变成异步的。它只是设置了请求使用tornado.http.AsyncHTTPClient
。