Форум сайта python.su
Добрый вечер.
Разрабатываю сайт который будет работать следующим образом:
По запросу пользователя скрипт парсит несколько страниц (httplib) и выдаёт результат пользователю. От запроса до выдачи проходит около минуты.
Сейчас уже вообщем-то всё работает, но сервер поднят пока на моём ноутбуке. Во время работы httpd.exe всегда ест 100% процессора. Работу под нагрузкой вроде держит - если запускаю сайт из трёх разных браузеров, то всё нормально.
Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.
Помогите понять где затык.
Планирую запустить сервис как многопользовательский проект с большой нагрузкой, но никогда таким не занимался.
Офлайн
alphavilleочевидно твой серверный сценарий блокирует mysql-таблицу (LOCK TABLE) либо стартует транзакцию. А сценарий с автозаполнением не может взять данные из таблицы/базы пока те заблокированы.
Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.
Офлайн
dimabestДело похоже действительно в доступе в базе. Но у меня ничего не блокируется, все запросы заканчиваются connection.close() и вроде ничего не держат. Возможно просто влияет большое количество обращений к БД. Их получается где-то 10 простых обращений (лёгкий SELECT) и в конце в базу записывается кэш запроса (~100 КБ).alphavilleочевидно твой серверный сценарий блокирует mysql-таблицу (LOCK TABLE) либо стартует транзакцию. А сценарий с автозаполнением не может взять данные из таблицы/базы пока те заблокированы.
Проблема вот в чём:
Если один браузер сейчас ждёт результат, то автозаполнение(Ajax.autocompleter из Prototype и wsgi+MySQL на сервере) не работает, пока первому не придёт результат.
Офлайн
alphavilleпосле записи в базу комит делаешь?
в конце в базу записывается кэш запроса (~100 КБ).
Офлайн
Извините, опять не то. Не в базе дело.
Вот простейший wsgi скрипт: выдаёт браузеру рандомное число.
from random import random
def application(environ, start_response):
output = str(random())
status = '200 OK'
response_headers = [('Content-type', 'application/javascript'),('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
Отредактировано (Дек. 17, 2009 18:25:57)
Офлайн
o7412369815963да, конечно. посмотрите пожалуйста мой коммент выше. там я все обращения к базе убрал. лучше не стало.alphavilleпосле записи в базу комит делаешь?
в конце в базу записывается кэш запроса (~100 КБ).
Офлайн
Видимо это просто общая проблема недостатка производительности. При запросе httpd всегда отжирает 100% процессора и ноут не тянет.
Есть ещё десктопный комп 3 гига оперативы, пень 4-й. Переносить на него?
Офлайн