Найти - Пользователи
Полная версия: Странные глюки в алхимии
Начало » Базы данных » Странные глюки в алхимии
1
Naota
Было дело, что у меня жутко глючил сайт написанный на pylons. Например обновляя страницу поочередно, то есть новая запись то её нет. В итоге пришел вот к такому коду в контроллерах:
def __after__(self):
    Session.flush()
    Session.close()
и все начало нормально работать. Кто нибудь с этим сталкивался?
Андрей Светлов
Ничего странного - стандартный код. Чистит сессию после использования. Дело в том, что пилон создает несколько потоков, в каждом из которых крутится по обработчику.
Предположим для простоты, их два. И что они используются циклически (на самом деле все сложнее, по пример суть отражает).
Первый вызов, первый поток: берет, скажем, пользователя - и он попадает в сессию первого потока.
Второй вызов, второй поток: изменяет свойства этого же пользователя и записывает изменения в базу.
Третий вызов, первый поток: показывает свойства пользователя. Пользователь уже в сессии первого потока - но на состояние первого вызова, без изменений, внесенных вторым. Результат - отображаются устаревшие данные

Очистка сессии заставляет перечитывать все из базы каждый раз при новом обращении - сначала сохранив сделанные изменения.
Naota
Хм. Наверно зря я так вызываю это при каждом запросе. Все таки для чего-то это все нужно. Спасибо за разъяснения.
Андрей Светлов
Явный вызов flush может быть полезен: например, чтобы поймать Integrity Error и сказать, что пользователь с таким логином уже существует. Впрочем, это сильно зависит от применяемой схемы обработки ошибок.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB