Этот сайт не наркоманов. Это сайт программистов. Здесь курят мануал.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 25 Май, 2012, 05:33:31

Страниц: [1]
Печать
Автор Тема: Фишки джанго  (Прочитано 276 раз)
0 Пользователей и 1 Гость смотрят эту тему.
AlexB    ↓ 
29 Октябрь, 2011, 12:55:01
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6

Сюда буду бросать неочевидные вещи, пока одна:
 
1. Знаете ли вы, что если попробовать с помощью джанговской ORM начать обрабатывать большое количество записей (например миллион), то через некоторое время скрипт загибается? Представляете, сколько раз икнулось разработчикам пока я обрабатывал такую базу? Три раза я переписывал скрипт, запускал его на ночь и с утра обнаруживал мертво висящий компьютер. Решение оказалось элементарным, надо просто ... отключить дебаг! Вот так:
Python
from django.conf import settings
settings.DEBUG = False
Фишка в том, что при дебаге все SQL запросы джанга логирует в памяти и в конце концов она просто заканчивается ...
« Последнее редактирование: 29 Октябрь, 2011, 12:55:01 от AlexB » Записан

phpdude    ↓ 
29 Октябрь, 2011, 02:04:40 , спустя 1 час 9 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: 20790
Сила слова: 1.66

очевидная хуйня на самом деле :)))
 
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
AlexB    ↓ 
29 Октябрь, 2011, 03:11:15 , спустя 1 час 6 минут 35 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6


очевидная хуйня на самом деле :)))
Ага, когда стало известно в чем дело, кажется очевидным. А до того как нашел, голову ломал откуда утечки памяти. И два опытных питонщика, которые со мной работают ... тоже хуй подсказали ...
Записан

Абырвалг    ↓ 
29 Октябрь, 2011, 04:18:36 , спустя 1 час 7 минут 21 секунду
НЕ ХУЕТА! ХУЕТА!

PHP Infected, симфоеб, маконенавистник
Группа: Джедаи

Карма: 80
Сообщений: 6096
Сила слова: 1.31

нас тоже такая "проблема" настигла, но мы ж симфоебы.
 
а как-нить более нормально это исправить в джанго нельзя? вот у нас в сраном пхп можно рантайм отключить чисто логгирование скл. Или даже более правильно поступить - ограничить размер буффера (логи-то на диск/в базу сбрасываться будут).
Спустя 1 минуту 35 секунд добавил
http://slides.seld.be/?file=2011-10-20+High+Performance+Websites+with+Symfony2.html#37
Записан

PHP does the job since 1995
Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
NRG    ↓ 
31 Октябрь, 2011, 12:11:04 , спустя 1 день 7 часов 52 минуты 28 секунд
НЕ ХУЕТА! ХУЕТА!

Headshot!MultiKill!
Группа: нинзя

Карма: 777
Сообщений: 4700
Сила слова: 16.81

джанга-хуянга
Спустя 1 минуту 15 секунд добавил
извините, не сдержался)
Записан

Буратино дрочил, дрочил и сгорел
Java и JavaScript это абсолютно разные вещи !!!
Господа, вы хуйня.
девушки краснели, отворачивались но порнуху продолжали смотреть
AlexB    ↓ 
31 Октябрь, 2011, 12:17:32 , спустя 6 минут 28 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6


джанга-хуянга
Спустя 1 минуту 15 секунд добавил
извините, не сдержался)
ничего, ничего, все знают, что повтореная дважды шутка - смешна вдвойне
Записан

Sinkler    ↓ 
31 Октябрь, 2011, 12:19:31 , спустя 1 минуту 59 секунд
НЕ ХУЕТА! ХУЕТА!

Похуй, пляшем!
Группа: Джедаи

Карма: 73
Сообщений: 6807
Сила слова: 1.07

вухаха))))
Записан

adw0rd    ↓ 
31 Октябрь, 2011, 10:02:29 , спустя 9 часов 42 минуты 58 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17631
Сила слова: 1.67

ничего, ничего, все знают, что повтореная дважды шутка - смешна вдвойне
+1
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
AlexB    ↓ 
31 Октябрь, 2011, 10:15:29 , спустя 13 минут
НЕ ХУЕТА! ХУЕТА!

Группа: в ухо

Карма: 89
Сообщений: 3428
Сила слова: 2.6


а как-нить более нормально это исправить в джанго нельзя? вот у нас в сраном пхп можно рантайм отключить чисто логгирование скл.
Честно? Не знаю! Но нужды особой не вижу. Дебаг нужен пока ты тестируешь на небольших тестовых данных, а когда запускаешь с реальным объемом, нафиг он сдался? Тут должно все без ошибок отработать ...
Записан

adw0rd    ↓ 
31 Октябрь, 2011, 11:54:09 , спустя 1 час 38 минут 40 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17631
Сила слова: 1.67

AlexB, +1
Спустя 37 секунд добавил
Но вообще, смотрите модуль https://docs.djangoproject.com/en/dev/topics/logging/
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
mathete    ↓ 
02 Декабрь, 2011, 05:41:09 , спустя 32 дня 5 часов 47 минут
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14

Понимаю, что теме месяц. Но всё же хотел добавить.
1. Это именно фишка джанго. Очень удобный инструмент для дебагинга. И на основе этого и работает sql дебагинг во всяких джанго-тулбарах.
2. Это не логгинг в стандартном понимании.
3. Под капотом всё просто:
в django.db есть connection - текущий connection к базе. Я тут опускаю работу с несколькими базами, но всё аналогично.
У этого connection есть атрибут queries - это как раз список всех запросов. Каждый запрос - это словарь {'time':<время_выполнения>, 'sql':<sql_отправленный_в_базу>}
И обычно работа происходит так:
 
Python

from django.db import connection
 
from someapp.models import SomeModel, AnotherModel..
 
try:
    qs = SomeModel.objects.filter(....).extra(....)
    qs2 = AnotherModel.objects.filter(....).values(....).annotate(....)
# и так далее..
# короче много запросов и может даже какой-то из них валится и не понять почему
 
finally:
    for q in connection.queries:
        print q['time'], '  ::  ', q['sql']
 
 

 
4. Если же у вас куча запросов и нужен DEBUG=TRUE, то просто периодически сбрасывайте connection.queries
 
Ну предположим у вас какой-нибудь бесконечный цикл и в нем обращения к базе.
Python

from django.db import connection
 
while True:
 
      # тут эти все ваши запросы
      .....
 
      # и в конце итерации
      connection.queries = []
 

 
Записан
adw0rd    ↓ 
03 Декабрь, 2011, 09:59:21 , спустя 1 день 4 часа 18 минут 12 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17631
Сила слова: 1.67

ага, либо рвать соединение надо переодически
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
mathete    ↓ 
04 Декабрь, 2011, 01:28:28 , спустя 3 часа 29 минут 7 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 12
Сообщений: 70
Сила слова: 17.14

Если баз несколько и не обязательно, лучше всего юзать *reset_queries*
https://code.djangoproject.com/browser/django/trunk/django/db/__init__.py#L39
 
Она слушает сигнал request_started. Именно так сбрасываются запросы при обычной работе.
Записан
adw0rd    ↓ 
04 Декабрь, 2011, 09:28:45 , спустя 8 часов 17 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17631
Сила слова: 1.67

Сенкью, буду иметь ввиду
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Страниц: [1]
Печать
 

Перейти в: