Найти - Пользователи
Полная версия: Выбор веб-сервера, ошибки в thread
Начало » Pyramid / Pylons / TurboGears » Выбор веб-сервера, ошибки в thread
1 2 3
alexlp
mod_python увы не могу.
А с wsgi, что ни у кого подобных проблем не было? Или не тестировали на нагрузку? По идее даже с simplesite из pylonsbook возникнут такие проблемы.
estin
Покажите ваш код.

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

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

http://file.qip.ru/file/111795142/3f2ec005/thesite.html
ofigetitelno
:)
а без psyco пробовали?
alexlp
без психо тоже самое
estin
Как уже просил ofigetitelno, покажите кусок кода, где вы сохраняете данные в сессию.
alexlp
Ок. Механизм таков.
Работая в системе менеджер выбирает клиента. И менеджер и клиент - запись в таблице 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)
estin
мда… интересно…

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

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

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


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
estin
Насколько я понимаю с таким конфигом будет запущен один воркер.

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

use = egg:Paste#http
host = 127.0.0.1
port = 8080
use_threadpool = true
threadpool_workers = 5
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