Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 31, 2011 09:34:49

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

Кеширование mod_wsgi

Добрый день, уважаемые!

Может быть, кто-то сталкивался. Есть у меня приложение на mod_wsgi. Оно выводит данные из некой таблицы MySQL. там данные периодически добавляются. Так вот, я получаю при одинаковых запросах разные ответы. т.е. например показывает, например, количество записей в таблице одно, через секунду показывает меньше(хотя записей меньше не становится, их количество только растет), затем снова возвращается к реальной цифре…

грешу на кеширование mod_wsgi. Собственно, вопрос такой, состоятельна ли моя теория и как проверить? Как исправить, если кто знает?

P.S. Пробовал эти запросы напрямую в MySQL-клиенте, результаты стабильные, не прыгают.



Отредактировано (Янв. 31, 2011 09:37:12)

Офлайн

#2 Янв. 31, 2011 10:02:52

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Кеширование mod_wsgi

Ну вы и спросили, уважаемый!
Абстрактное приложение на какой-то базе (с ней более или менее ясно), использующее непонятно какой интерфейс к БД и неясно как прицепленное к апачу.
Эта связка не работает.
Догадайтесь, где закрался злобный баг?

Очень удобно и легко отвечать на вопросы, которые можешь воспроизвести.
И очень лениво догадываться, что у вопрошающего не так.



Офлайн

#3 Янв. 31, 2011 10:12:22

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Кеширование mod_wsgi

Paher
грешу на кеширование mod_wsgi
оно там вроде не кешируется же. Андрей Светлов верно сказал. Никакой фреймворк не используете?



Офлайн

#4 Янв. 31, 2011 10:32:39

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

Кеширование mod_wsgi

Прошу прощения, если непонятно объяснил. Расскажу подробнее.

Итак, в базе MySQL есть таблица. с данными. Строки в таблицу только добавляются и никак не удаляются

вот входной скрипт main.py

import cgi
import monitoring


# End of initialisation


def application(environ, start_response):

cgidata = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)
answer = monitoring.get_result(cgidata['begin'])
start_response('200 OK', [('Content-type', 'text/plain')])
return answer
Есть питоновский скрипт, который запрашивает количество записей в таблице(обычный SELECT COUNT(*)) monitoring.py

import MySQLdb

cursor = MySQLdb.connect(host, user, passwd, db, cursorclass = MySQLdb.cursors.DictCursor).cursor()

def get_result(begin):
sql = '''SELECT COUNT(*) FROM `monitoring` WHERE `date` > %s''' % begin
cursor.execute(sql)
count = cursor.fetchone()['num']
return count
настройки mod_wsgi


WSGIScriptAlias / /var/www/wsgi/main.py

<Directory /var/www/wsgi/>
Order deny,allow
Allow from all
</Directory>

так вот, при одинаковом параметре begin возвращаемое значение count должно либо оставться прежним, либо увеличиваться. а он, временами, скачет назад, как будто показывает уже отданные ответы

Фреймворк не использую



Отредактировано (Янв. 31, 2011 10:34:14)

Офлайн

#5 Янв. 31, 2011 10:36:38

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Кеширование mod_wsgi

Насколько я знаю, SQL стандарт не придерживается строгого порядка выдачи результатов запроса, пока явно не указан ORDER BY. С таким успехом вы можете итерировать по словарю и получать каждый раз другой порядок обхода. Судя по всему проблема в этом.



Офлайн

#6 Янв. 31, 2011 10:41:51

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

Кеширование mod_wsgi

я получаю количество записей разное, а не разный порядок записей



Офлайн

#7 Янв. 31, 2011 10:50:21

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Кеширование mod_wsgi

Paher
я получаю количество записей разное, а не разный порядок записей
Попробуйте выводить значение
cgidata['begin']
при каждом запуске. Не меняется, ли оно…



Офлайн

#8 Янв. 31, 2011 11:10:15

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Кеширование mod_wsgi

Хм… может быть connect перенести в функцию get_rezult?



Офлайн

#9 Янв. 31, 2011 11:39:31

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

Кеширование mod_wsgi

connect специально вынес за пределы функции, чтобы он происходил при импорте модуля и потом время на подключение не тратить. собственно, mod_wsgi именно поэтому и поставил, чтобы все подготовительные работы (подключение базы, импорт модулей) провести один раз, а в дальнейшем только пользоваться ими.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version