#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
).