Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 5, 2010 01:48:56

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Bottle framework

На форуме хвалят Bottle framework, решил посмотреть что за зверь.
Первое что бросилось в глаза - это код

request = Request()
объявленный на уровне модуля.

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

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

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

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

Страшный баг в архитектуре или я чего-то не понимаю?



Офлайн

#2 Апрель 5, 2010 01:53:52

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Bottle framework

Посмотрел другие примеры из документации:

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)
:) :)
а, ну тогда понятно кто его писал :)



Офлайн

#3 Апрель 5, 2010 03:20:13

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Bottle framework

dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.



Офлайн

#4 Апрель 5, 2010 11:41:47

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Bottle framework

Daevaorn
dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.
+1
у меня около 10 сайтов/утилит работает на bottle, некоторые через apache, таких багов не было.

Офлайн

#5 Апрель 5, 2010 11:45:33

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Bottle framework

dimabest
Посмотрел другие примеры из документации:
а, ну тогда понятно кто его писал :)
1. разработчик не писал примеры, этим занимались другие люди
2. это не показатель, т.к. это веб-фреймворк
3. можно использовать что угодно, хоть алхимию

ЗЫ: хороший веб-фрейворк для написания маленьких сайтов/утилит. + не требует установки

Офлайн

#6 Апрель 5, 2010 13:23:16

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Bottle framework

Daevaorn
dimabest
Страшный баг в архитектуре или я чего-то не понимаю?
Вы не понимаете. Вот это предположение не верно:
dimabest
но в request уже есть данные Васи и они не будут перезаписаны
Будут. При новом запросе там будут новые данные.
Написал тест, действительно - поток старый, а данные новые. Спасибо, просветили



Офлайн

#7 Апрель 6, 2010 00:27:17

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Bottle framework

+ в карму за скептицизм.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version