我有一個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