Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2008 17:13:52

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Странные глюки в алхимии

Было дело, что у меня жутко глючил сайт написанный на pylons. Например обновляя страницу поочередно, то есть новая запись то её нет. В итоге пришел вот к такому коду в контроллерах:

def __after__(self):
    Session.flush()
    Session.close()
и все начало нормально работать. Кто нибудь с этим сталкивался?



Офлайн

#2 Май 28, 2008 18:11:23

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Странные глюки в алхимии

Ничего странного - стандартный код. Чистит сессию после использования. Дело в том, что пилон создает несколько потоков, в каждом из которых крутится по обработчику.
Предположим для простоты, их два. И что они используются циклически (на самом деле все сложнее, по пример суть отражает).
Первый вызов, первый поток: берет, скажем, пользователя - и он попадает в сессию первого потока.
Второй вызов, второй поток: изменяет свойства этого же пользователя и записывает изменения в базу.
Третий вызов, первый поток: показывает свойства пользователя. Пользователь уже в сессии первого потока - но на состояние первого вызова, без изменений, внесенных вторым. Результат - отображаются устаревшие данные

Очистка сессии заставляет перечитывать все из базы каждый раз при новом обращении - сначала сохранив сделанные изменения.



Отредактировано (Май 28, 2008 19:10:53)

Офлайн

#3 Май 28, 2008 18:38:51

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Странные глюки в алхимии

Хм. Наверно зря я так вызываю это при каждом запросе. Все таки для чего-то это все нужно. Спасибо за разъяснения.



Офлайн

#4 Май 28, 2008 19:12:53

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Странные глюки в алхимии

Явный вызов flush может быть полезен: например, чтобы поймать Integrity Error и сказать, что пользователь с таким логином уже существует. Впрочем, это сильно зависит от применяемой схемы обработки ошибок.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version