Мой вызов API торнадо вызовет другой URL-адрес, а затем передаст результат обратно клиенту. Однако, если внутренний URL-адрес возвращает код ошибки, я хочу отдельно обрабатывать собственную ошибку и передавать клиенту сообщение об ошибке. То, что я в настоящее время это:Как обрабатывать потоковые данные в торнадо асинхронно, одновременно обрабатывая код ответа?
@web.asynchronous
@gen.coroutine
def get(self, job_id):
url = ...
client = httpclient.AsyncHTTPClient()
# handle_chunk will forward received bytes to the client, allowing
# other HTTP requests to be handled concurrently
response = yield client.fetch(httpclient.HTTPRequest(
url=url,
streaming_callback=self._handle_chunk))
self.finish()
def _handle_chunk(self, chunk):
self.write(chunk)
self.flush()
Мне нужно изменить это, чтобы только начать экспедиционные ломти, если код ответа находится в 200 семье, но ответа не дали по client.fetch
, пока весь запрос не будет завершен. есть идеи как это сделать?
Должен ли 'header_callback' быть вызван до и из вызовов' streaming_callback'? – Lucretiel
Да, header_callback всегда вызывается перед первым streaming_callback. (если соединение преуспевает.Если произошел сбой до того, как соединение будет выполнено, 'yield client.fetch() будет вызывать ошибку без вызова обратного вызова) –
Пожалуйста, не оставляйте комментарии по старым ответам с совершенно новыми вопросами для обсуждения , Отправьте новый вопрос. –