tornado

一个请求到达tornado后如何被处理

异步非阻塞的tornado能够让同一台服务器接受更多的连接,服务更多用户,但对于每个用户来说,原本要等10秒才出现的浏览结果,现在至少还需要10秒,甚至可能还会慢一点,因为同样的硬件,现在有更多请求被接入进来。 很早打算阅读tornado源码,因为从来没有读过一个web框架的源码,作为后端实在不应该也不利于自己能力提升。最近遇到tornado相关问题,需要阅读源码证实猜想——tornado是否能检测到连接断开,不再处理相关request? import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello,

tornado

tornado未处理已关闭的连接

应用架构 nginx作为反向代理工作在客户端和后端服务之间: 客户端的请求来到nginx nginx再把请求转发到后端 最终把后端的结果送回给客户端完成一次交互 问题 最近总是遇到棘手的问题,上周主要解决Queue和Redis,这周又遇到老问题——一个接口服务偶尔响应变慢,导致使用方积压大量请求,严重影响业务正常运行。但每次遇到这个问题,重启一遍接口服务就正常。 猜测是接口连接的数据库变慢导致接口运行变慢,这很直接,但在接口变慢的时候,单独测试数据库,非常快。 接口连接的数据库是Oracle,驱动是oracle instant client,接口用的Python库是cx_Oracle,测试发现我们调用了cx_Oracle库提供的ping方法来检测连接是否正常,如果此时网络断掉,ping会一直阻塞住直到网络恢复才返回。测试方法是: 正常建立连接,调用ping,未出现异常;

tornado

nginx 499 Recv-Q

不知道标题应该怎么写才可以描述清楚这个问题。我们有一个服务,提供一些数据给自己用,后端连着Oracle和MSSQL数据库,由Nginx作为反向代理,Tornado作为后端服务查询写入数据。 一开始记得是开了8个Tornado进程,运行了挺长时间没发现问题,最近发现在调用接口是经常得到status code 499,这不是标准的code,而是nginx自己用的,用来表示客户端主动断开连接的状况。客户端在我们这里其实是python的requests库,比如我们需要刷新会员积分,会用requests请求接口,获得会员积分信息,调用时在requests的timeout参数中加入连接超时和读超时限制,一般连接超时设置到3.05s,读超时设置到27s。一般出现499时都是read timeout。 一开始我以为是8个Tornado不够,导致大量请求挤压在那里,超过27s,客户端断开。于是我增加一倍的Tornado进程,发现竟然没问题。后来我又增加到20个Tornado进程,不过实际根本不需要这样做,因为后来,