当且仅当客户端成功完成我使用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"
我错过了一些基本的东西吗?龙卷风甚至可以支持我正在尝试做的事情吗?如果没有,是否有替代方案呢?
答案 0 :(得分:1)
我相信您正在寻找可以覆盖的on_connection_close
请求处理程序方法中运行的内容。
请记住,如果你在nginx后面运行,龙卷风将立即响应nginx,nginx将慢慢响应客户端。
另外,请记住,添加@tornado.web.asynchronous
实际上并不会使请求异步。它只设置使用tornado.http.AsyncHTTPClient
的请求。