python tornado

【tornado】write和finish区别

技术分享

systemime
2020-06-01
2 min

tornado中write方法和finish方法的区别

# 1. 代码演示

from tornado_learning.handler import BaseHandler
import time

class Write_Finish_Handler(BaseHandler):

    def get(self):
        self.write("hello")
        time.sleep(4)
        self.finish("world")

"""
四秒后输出hello world
"""
class Finish_Write_Handler(BaseHandler):

    def get(self):
        self.finish("hello")
        self.write("world")

"""
仅输出hello
同时报错:
	RuntimeError: Cannot write() after finish()
报错不影响前端显示和其他操作
"""

# 2. 解释

  • self.finish()代表回应到前端的终结。并且可以在finsh后做一些与回应给前端无关的操作,缩短响应时间。
  • self.write()并不会马上将数据返回前端,必须在self.finsh()或者return后才会响应,类似以缓存吧。

self.finish() 代表回应生成的终结,并不代表着请求处理逻辑的终结。假设你有一个block的逻辑是和回应无关的,那么放在self.finish() 的后面可以显著的缩短响应时间。所以,如果你确定自己的逻辑需要立即返回,可以在self.finish()后立刻return。Tornado在将这个自由留给了你自己。

上次编辑于: 2021/5/24 下午1:55:49