之前系统出现了几次 too many open files
报错,点击查看历史文章,调整了系统参数、应用参数,改了几次还是会报错。
既然系统没问题,我就开始考虑我写的程序问题了,too many open files
出现的原因不仅是打开文件,也有可能是打开了过多 socket 通道没有及时关闭导致的。遂查看代码:
# 伪代码
class test_user(tornado.web.RequestHandler):
def get_info(self,**kwargs):
...
# 此处为业务逻辑
utils.dept.get_dep()
data = '1234567'
self.finsh(data)
我每次都用self.finsh()
关闭连接了呀,然后就去网上查了一下self.finsh()
的用法,可能是了解的不够详细。
查到的解释:
self.finish()
代表回应到前端的终结。并且可以在finsh后做一些与回应给前端无关的操作,缩短响应时间。
self.write()
并不会马上将数据返回前端,必须在self.finsh()或者return后才会响应,类似以缓存吧。
由于本系统之后的业务流程都与前端无关,所以接收数据后就可以立即结束连接。
因此改了一下执行顺序,接收数据、校验之后直接给前端返回并关闭连接,然后再进行之后的业务流程。
# 伪代码
class test_user(tornado.web.RequestHandler):
def get_info(self,**kwargs):
...
data = '1234567'
self.finsh(data)
# 此处为业务逻辑
utils.dept.get_dep()
不知道这样修改了之后能不能解决问题,先观察两天。。。