tornado self.finsh()

之前系统出现了几次 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()

不知道这样修改了之后能不能解决问题,先观察两天。。。

猜你喜欢

转载自blog.csdn.net/weixin_41474364/article/details/105123838