Питонический поточно-безопасный объект
Прочитав много по этому вопросу и обсуждая IRC, кажется, что ответ: держаться подальше от потоков . Извините за повторение этого вопроса, мое намерение состоит в том, чтобы углубиться в тему, не приняв ответ «резьба злой», надеясь найти общее решение.
РЕДАКТИРОВАТЬ: Просто скажите «Нет» объединенным зовам блокировки, тупиков, блокировки детализации, живиков, недетерминизма и условий гонки. – Гуйдо ван Россум
Я разрабатываю веб-приложение Python, и я хотел бы создать глобальный объект для каждого пользователя, доступный только для текущего пользователя . (например, запрошенный URI)
Предлагаемый способ состоит в том, чтобы передать объект, который ИМО делает приложение более сложным, а не красивым кодом, если мне нужно то же самое значение в разных местах (некоторые могут быть сторонними плагинами).
Я вижу, что многие популярные фреймворки (Django, CherryPy, Flask) используют блокировки потоков Python для решения проблемы. Если все эти рамки идут против путинского пути и ощущают потребность в создании объекта, доступного в глобальном масштабе, это означает, что сообщество нуждается в таких вещах. И мне тоже.
Является ли «лучший» способ передать объекты? Это единственное альтернативное решение для использования «злых» потолочных замков? Будет ли более Pythonic хранить эту информацию в базе данных или memcached?
Заранее спасибо!
- Могу ли я переопределить запрос для класса и использовать подкласс, если свойства подходят?
- объект пропуска python в качестве аргумента
- AppEngine: Можно ли написать динамическое свойство (db.Expando) с именем, выбранным во время выполнения?
- Как удалить старые ссылки в Python?
- Как сохранить и восстановить несколько переменных в python?
Если вы не хотите блокировать, то либо не используйте глобальные переменные, либо используйте поточное локальное хранилище (в webapp вы можете быть уверены, что запрос не будет пересекать границу потока). Если можно избежать глобального состояния, его следует избегать. Это упрощает внедрение и отладку многопоточности.
Я также не согласен с тем, что передача объектов вокруг упрощает работу приложения – обычно это наоборот – глобальное состояние скрывает зависимости в дополнение к необходимости тщательной синхронизации.
Ну, есть также блокировочные подходы, такие как STM или еще что-то, но это, вероятно, переполнение для веб-приложения.
- Python – я, не я и cls
- Тип и тип объекта Python
- Создание объекта Python
- Все ли объект в python, как ruby?
- Как получить доступ к имени данной переменной в python?
- Python перестает обнюхивать определенное состояние
- Метод Python по умолчанию / без имени
- AttributeError при использовании объекта .__ setattr__
- POPON OOP – объект не имеет атрибута