我有一个Tornado RequestHandler
与@tornado.web.stream_request_body
装饰器允许分块流式传输给处理程序。完美关闭Tornado流媒体请求
我需要在允许流式传输之前执行身份验证和其他一些检查。我试图在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'也需要是一个协程。 – desertkun