Форум сайта python.su
Добрый день, уважаемые!
Может быть, кто-то сталкивался. Есть у меня приложение на mod_wsgi. Оно выводит данные из некой таблицы MySQL. там данные периодически добавляются. Так вот, я получаю при одинаковых запросах разные ответы. т.е. например показывает, например, количество записей в таблице одно, через секунду показывает меньше(хотя записей меньше не становится, их количество только растет), затем снова возвращается к реальной цифре…
грешу на кеширование mod_wsgi. Собственно, вопрос такой, состоятельна ли моя теория и как проверить? Как исправить, если кто знает?
P.S. Пробовал эти запросы напрямую в MySQL-клиенте, результаты стабильные, не прыгают.
Отредактировано (Янв. 31, 2011 09:37:12)
Офлайн
Ну вы и спросили, уважаемый!
Абстрактное приложение на какой-то базе (с ней более или менее ясно), использующее непонятно какой интерфейс к БД и неясно как прицепленное к апачу.
Эта связка не работает.
Догадайтесь, где закрался злобный баг?
Очень удобно и легко отвечать на вопросы, которые можешь воспроизвести.
И очень лениво догадываться, что у вопрошающего не так.
Офлайн
Paherоно там вроде не кешируется же. Андрей Светлов верно сказал. Никакой фреймворк не используете?
грешу на кеширование 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
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
Отредактировано (Янв. 31, 2011 10:34:14)
Офлайн
Насколько я знаю, SQL стандарт не придерживается строгого порядка выдачи результатов запроса, пока явно не указан ORDER BY. С таким успехом вы можете итерировать по словарю и получать каждый раз другой порядок обхода. Судя по всему проблема в этом.
Офлайн
я получаю количество записей разное, а не разный порядок записей
Офлайн
PaherПопробуйте выводить значение
я получаю количество записей разное, а не разный порядок записей
cgidata['begin']
Офлайн
Хм… может быть connect перенести в функцию get_rezult?
Офлайн
connect специально вынес за пределы функции, чтобы он происходил при импорте модуля и потом время на подключение не тратить. собственно, mod_wsgi именно поэтому и поставил, чтобы все подготовительные работы (подключение базы, импорт модулей) провести один раз, а в дальнейшем только пользоваться ими.
Офлайн