Я писал методы отладки для своего приложения CherryPy. Данный код был (очень) в основном эквивалентен этому:
import cherrypy
class Page:
def index(self):
try:
self.body += 'okay'
except AttributeError:
self.body = 'okay'
return self.body
index.exposed = True
cherrypy.quickstart(Page(), config='root.conf')
Я с удивлением заметил, что от запроса к запросу производительность self.body росла. Когда я зашел на страницу от одного клиента, а затем от другого одновременно открытого клиента, а затем обновил браузеры для обоих, вывод был постоянно увеличивающейся строкой «все в порядке». В моем методе отладки я также записывал специфичную для пользователя информацию (то есть данные сеанса), и она также отображалась в выходных данных обоих пользователей.
Я предполагаю, что это потому, что модуль python загружается в рабочую память, а не перезапускается для каждого запроса.
У меня такой вопрос: как это работает? Как получается, что self.debug сохраняется от запроса к запросу, а cherrypy.session и cherrypy.response - нет?
И есть ли способ установить атрибут объекта, который будет использоваться только для текущего запроса? Я знаю, что могу перезаписывать self.body для каждого запроса, но это немного нерегулярно. Есть ли стандартный или встроенный способ сделать это в CherryPy?
(второй вопрос перенесен на Как работает кэширование CherryPy? )