Форум сайта python.su
Ряд фреймворков использует сабж. Возникает вопрос - зачем нам это надо.
Варинаты ответов:
1. Это не так уж плохо.
2. Так и надо.
3. Это архитектурное решение - по другому не получается.
4. Сам не знаю, что им реквеста обычного не хватает.
5. свой ответ…
Офлайн
5. Это архитектурное решение потому что авторы не осилили другого.
Офлайн
Если речь про локальную память потоков, то:
2. Так и надо.
Офлайн
o7412369815963Вот уж не согласен. Скорее дело обстоит так, как Саня Кошелев написал.
Если речь про локальную память потоков, то:
2. Так и надо.
Офлайн
Эээ… я (лично я) сильно сомневаюсь, чтобы например Ян Бикинг, Бен Бангерт или Армин Роначер не могли бы осилить что-либо другое, тем не менее в WebOb, Pylons и Flask thread_local таки присутствуют и активно используются. Так что на мой взгляд влияние человеческого фактора сильно преувеличено.
На мой взгляд, thread_local нужно рассматривать как очень удачный паттерн (или антипаттерн) главной целью которого является снижение связности системы применительно к многопоточным приложениям, с соответствующими накладными расходами по производительности и снижением гибкости системы. В некотором роде thread_local очень близок по идее к синглтону - тоже вроде не очень правильно, но без него ни реестр, ни абстрактную фабрику не сделаешь, ни IoC не реализуешь.
Так что ПМСМ thread_local - это обдуманное архитектурное решение по принципу меньшего зла, ну или должно таковым являться.
Офлайн
ziroА это как раз является подтверждением. Короля делает свита, поэтому авторы этих решение осознанно идут по пути упрощения. Архитектурно чистые решение имеют меньшую целевую аудиторию чем более попсовые и простые.
Эээ… я (лично я) сильно сомневаюсь, чтобы например Ян Бикинг, Бен Бангерт или Армин Роначер не могли бы осилить что-либо другое, тем не менее в WebOb, Pylons и Flask thread_local таки присутствуют и активно используются. Так что на мой взгляд влияние человеческого фактора сильно преувеличено.
Офлайн
ziro, пусть WebOb и Flask останутся на вашей совести.
Использование threadlocal в Pylons - ошибка.
В Pyramid thread locals крайне ограничены - только для конфигурации.
Александр Кошелев, осилили они все прекрасно - достаточно в исходники сначала глянуть.
Офлайн
Андрей СветловКонечно, пусть останутся. Тем более, что использование thread_local является официальной рекомендацией WebOb
ziro, пусть WebOb и Flask останутся на вашей совести.
Андрей СветловНет. Это самое разумное решение, которое можно использовать в модели выполнения Pylons, когда класс контроллера импортируется на лету.
Использование threadlocal в Pylons - ошибка.
Офлайн
WebOb: пример в документации - есть. Использования thread locals в коде - нет.
Werkzeurg: модуль для thread locals - есть. Он не используется ядром самой библиотеки, только примерами.
Flask: был неправ. Извиняюсь.
Pylons: лет пять назад request передавался явно первым параметром в методы контроллера. Импортировать на лету это не мешало. Потом настал черный день
и автор решил, что неявная запись будет чуть короче.
Все еще считаю, что thread locals не должны выходить за пределы global state - настроек конфигурации. Передавать в них объекты вроде request - не следует.
Офлайн
Андрей Светловrequest в локальной памяти - то что доктор прописал…
Все еще считаю, что thread locals не должны выходить за пределы global state - настроек конфигурации. Передавать в них объекты вроде request - не следует.
Отредактировано (Март 31, 2011 14:24:57)
Офлайн