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