Медленный рендеринг в tornadoweb

#tornado

Вопрос:

У меня есть простая форма поиска, в которой пользователь вводит идентификатор, приложения отправляют запрос в серверную службу, возвращают строку json и передают ее шаблону с помощью:

 data = get_data_from_backend()
params = {"main_data": data['main_data'], "address_data": data['address_data']}
self.render("result.html",  **params)
 

Проблема в том, что иногда рендеринг может занять до 20-30 секунд.
Я провел сравнительный анализ, добавив информационный журнал прямо перед вызовом рендеринга, а также информационный вход

 def on_finish(self): 
 

Что еще более затрудняет устранение неполадок, так это тот факт, что тайминги не всегда одинаковы, даже для одного и того же ввода я получаю переменные тайминги от 2 до 30 секунд. Пожалуйста, обратите внимание, что параметры содержат больше переменных нескольких типов данных: списки, диктанты и т. Д., А также «result.html» несколько сложнее, потому что в нем есть 5-6 включений, и некоторые из этих включений имеют другие вложенные включения. FWIW поведение не воспроизводимо в моей среде разработки; это происходит только на производстве.
Есть какие-нибудь идеи о том, что может вызвать эту проблему ? Есть идеи, как устранить неполадки еще дальше ?

Спасибо, Джордж

Комментарии:

1. Вы получаете данные асинхронно? Это get_data_from_backend() — блокирующий или асинхронный вызов?

2. Это асинхронный вызов.

3. Если get_data_from_backend это асинхронно, вы должны использовать await get_data_from_backend ( и функция, в которой она вызывается, должна быть определена как async ).