Найти - Пользователи
Полная версия: Bottle framework
Начало » Web » Bottle framework
1
dimabest
На форуме хвалят Bottle framework, решил посмотреть что за зверь.
Первое что бросилось в глаза - это код
request = Request()
объявленный на уровне модуля.

Я не знаю как работает wsgiref.simple_server, который используется в примерах по умолчанию, но для Apache + mod_wsgi такой код выполнится всего 1 раз при первом запуске приложения.

Нахожу класс Request. Ага он наследуется от threading.local, значит request - это по сути объект-хранилище локальное для каждого потока. Тоесть код request = Request() будет выполнятся для каждого потока.

Но это не устраняет проблему! Поток, после обработки запроса не убивается Apache-м, а используется снова. В настройках Apache даже есть директива MaxRequestsPerChild, которая указывает сколько запросов может обработать поток, прежде чем его прибьют.

Имеем ситуацию: на сайт зашел Вася, поток обработал запрос, в request записались данные Васи. На сайт заходит Петя, запрос на обработку передается тому самому потоку, но в request уже есть данные Васи и они не будут перезаписаны (пока Apache не убьет поток/процесс или не перезагрузится).

Страшный баг в архитектуре или я чего-то не понимаю?
dimabest
Посмотрел другие примеры из документации:

query = "UPDATE todo SET task = '%s', status = '%s' WHERE id LIKE '%s'" % (edit,status,no)
c.execute(query)
query = "SELECT task, status FROM todo WHERE id LIKE '%d'" %no
c.execute(query)
:) :)
а, ну тогда понятно кто его писал :)
Александр Кошелев
dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.
o7412369815963
Daevaorn
dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.
+1
у меня около 10 сайтов/утилит работает на bottle, некоторые через apache, таких багов не было.
o7412369815963
dimabest
Посмотрел другие примеры из документации:
а, ну тогда понятно кто его писал :)
1. разработчик не писал примеры, этим занимались другие люди
2. это не показатель, т.к. это веб-фреймворк
3. можно использовать что угодно, хоть алхимию

ЗЫ: хороший веб-фрейворк для написания маленьких сайтов/утилит. + не требует установки
dimabest
Daevaorn
dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.
Написал тест, действительно - поток старый, а данные новые. Спасибо, просветили
Ferroman
+ в карму за скептицизм.
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