#python #python-3.x #server #webserver #tornado
#python #python-3.x #сервер #веб-сервер #tornado
Вопрос:
Я использую Tornado в качестве веб-сервера, и я заметил из официального руководства две функции initialize
and prepare
, которые вызываются перед обработкой запросов (POST, GET и т. Д.). Но я не могу понять разницу между двумя: кажется, их можно использовать для одних и тех же целей. Можете ли вы объяснить мне, имеют ли функции разные варианты использования?
Комментарии:
1. Руководство описывает это довольно хорошо, нет?
initialize
должен просто принимать аргументы, переданные классу, и в основном ничего больше.Prepare
может выполнять «фактическую работу», связанную с запросом.2. Если бы это было так ясно, я бы не спрашивал об этом
Ответ №1:
Если сомневаетесь, используйте prepare()
. prepare()
это подходящее место для выполнения большинства задач, потому что оно может делать все, что могут делать обычные методы обработчика (включая вызов self.write()
или self.render()
или повышение tornado.web.HTTPError
).
Используется только initialize()
для обработки аргументов, полученных из URLSpec
(почти всегда путем сохранения их в переменных экземпляра). initialize
может не вызывать такие методы, как self.write
, и исключения, которые он вызывает, могут обрабатываться не так чисто, поэтому делайте это просто.
Комментарии:
1. Инициализация вызывается только один раз, при запуске сервера?
2. Нет. Для каждого запроса будет создан новый объект RequestHandler, и вызываются его методы initialize и prepare .