【发布时间】:2017-05-17 11:55:41
【问题描述】:
我有一个带有 @tornado.web.stream_request_body 装饰器的 Tornado RequestHandler,以允许分块流式传输到处理程序。
在允许流式传输之前,我需要执行身份验证和一些其他检查。我尝试在RequestHandler.prepare() 方法中实现这些,但是当我使用requests 将数据流式传输到处理程序时,检查失败,连接突然关闭,我看到一个异常:
requests.exceptions.ConnectionError: [Errno 32] Broken pipe
我的prepare() 方法如下:
def prepare(self):
check = some_function()
if not check:
self.set_status(400)
self.write('some error message')
self.finish()
return
如何确保请求正常关闭,以便在检查失败时向客户端返回错误消息?
【问题讨论】:
-
你可以尝试用
@coroutine包裹prepare,这样会让Tornado等待你完成检查。因此,some_function也需要是协程。