Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2009 16:02:55

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

Выбор веб-сервера, ошибки в thread

mod_python увы не могу.
А с wsgi, что ни у кого подобных проблем не было? Или не тестировали на нагрузку? По идее даже с simplesite из pylonsbook возникнут такие проблемы.



Отредактировано (Дек. 10, 2009 16:05:17)

Офлайн

#2 Дек. 10, 2009 21:15:18

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор веб-сервера, ошибки в thread

Покажите ваш код.

>>По идее даже с simplesite из pylonsbook возникнут такие проблемы.
Воссоздайте описанную ситуацию на стандартном pylons + paster

Или напишите миделварю поверх всех осталных (чтобы вызывалась до стандартных) и проверте все заголовки запросов, ответов.



Офлайн

#3 Дек. 11, 2009 08:53:17

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

Выбор веб-сервера, ошибки в thread

Офлайн

#4 Дек. 11, 2009 14:29:32

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор веб-сервера, ошибки в thread

:)
а без psyco пробовали?



Офлайн

#5 Дек. 11, 2009 15:01:59

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

Выбор веб-сервера, ошибки в thread

без психо тоже самое



Офлайн

#6 Дек. 12, 2009 07:24:52

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор веб-сервера, ошибки в thread

Как уже просил ofigetitelno, покажите кусок кода, где вы сохраняете данные в сессию.



Офлайн

#7 Дек. 12, 2009 09:20:04

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

Выбор веб-сервера, ошибки в thread

Ок. Механизм таков.
Работая в системе менеджер выбирает клиента. И менеджер и клиент - запись в таблице users.
Если REMOTE_USER это users.id менеджера то SELECTED_USER это users.id клиента.

Выбор клиента - я получаю список <a href=“/set_user?user=number”></a>, нажав на определенную запись выполняю следующее:

session = Session.query(User).get('request.GET')
session.save()

далее в приложении исхожу из session с кем предстоит работать, пока менеджер не выберет нового клиента.

Остальной код это выбор значений из базы и запись значений в базу которые относятся к клиенту

Изначально я грешил на работу Beaker, мол неверно хранит сессионные данные (еще и его частые обновления…), но когда утром во время “залогинивания” один из менеджеров получил окно приветствия другого, я начал сомневаться.
Потом сомнениям подверглась работа сервера Paste, я проверил нет ли в сети прокси (прозрачных, кеширующих), я перестроил приложение на apache2+mod_wsgi. Удалось определить, что “перебросы” на другие сессии (за сессию считаю сеанс другого менеджера и данные с которыми он работает) случается по время одновременного вызова одного шаблона или действия. Грубо говоря, если одновременно находясь в шаблоне выбора клиента выбрать какую то запись одновременно с “менеджером 2”, можно увидеть окно “менеджера 2”. Если кешироваться данные на стороне клиента не могут, получается неверно работает Web-Server, будь то Apache или Paster. Ошибочный шаблон отдается моментально (при смене данных обычно 1 секунду, пока выберет данные из базы и т.п., чувствуется, что система “работает”, а тут моментально).

Полностью показать исходники приложения не могу ибо на меня подадут в суд. Хотя думаю проблема кроется не в моем коде, а в работе именно pylons-окружения. Может http://pythonpaste.org/paste-httpserver-threadpool.html или еще что я настроил неверно, ну там load_environment() или middleware (сейчас по примеру из pylonsbook)



Офлайн

#8 Дек. 13, 2009 18:51:13

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор веб-сервера, ошибки в thread

мда… интересно…

А настройки sqlalchemy стандартные? Может она где пытается кешировать..

Пробуйте http://pypi.python.org/pypi/Spawning :)
Шустрый и легко запускается с paste. use = egg:Spawning

Может действительно у вас “хитрые” настройки? Покажите production.ini



Офлайн

#9 Дек. 14, 2009 06:48:28

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

Выбор веб-сервера, ошибки в thread

Вроде ничего хитрого


debug = true
smtp_server = localhost
error_email_from = paste@localhost


use = egg:Paste#http
host = 127.0.0.1
port = 8080


use = egg:website
full_stack = true
static_files = true

cache_dir = %(here)s/data

beaker.session.key = website
beaker.session.secret = somesecret

sqlalchemy.url = postgres://websiteuser:websitepassword@localhost:5432/websitedb
sqlalchemy.pool_recycle = 3600
sqlalchemy.convert_unicode = true

# Logging configuration

#keys = root, routes, website, sqlalchemy
keys = root, routes, website


keys = console


keys = generic


level = INFO
handlers = console


level = INFO
handlers =
qualname = routes.middleware
# “level = DEBUG” logs the route matched and routing variables.


level = DEBUG
handlers =
qualname = website


level = INFO
handlers =
qualname = sqlalchemy.engine
# “level = INFO” logs SQL queries.
# “level = DEBUG” logs SQL queries and results.
# “level = WARN” logs neither. (Recommended for production systems.)


class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic


format = %(asctime)s,%(msecs)03d %(levelname)-5.5s %(message)s
datefmt = %d.%m.%y %H:%M:%S



Офлайн

#10 Дек. 14, 2009 11:01:23

estin
От:
Зарегистрирован: 2008-05-31
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Выбор веб-сервера, ошибки в thread

Насколько я понимаю с таким конфигом будет запущен один воркер.

Пробуйте. Хотя вы настраивали для Apache WSGIDaemonProcess threads=100…

use = egg:Paste#http
host = 127.0.0.1
port = 8080
use_threadpool = true
threadpool_workers = 5



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version