Mail.ru Group corporate blog
Python
Django
Comments 25
UFO landed and left these words here
+3
Если честно, не в курсе, потому что не использую IDE в работе.
Гугл говорит, что вот это: pydev.org/ то, что нужно.
UFO landed and left these words here
+4
Вопреки сложившимся мифам, нас в mail.ru не насилуют и не заставляют пользоваться продуктами компании в обязательном порядке. А ещё мы не поём гимны стоя по утрам и в целом — самые обычные люди.

У Google лучше результаты запросов на тему программирования по англоязычным ресурсам — это факт. Лучше, чем Поиск Mail.ru и лучше, чем Яндекс. У Поиска Mail.ru другие преимущества. Это моё субъективное мнение, если неправ — прошу поправить.

Или это троллинг такой толстый был а я типа такой наивный повёлся?
UFO landed and left these words here
+2
Пользуюсь newrelic уже пару лет и очень доволен. В айфоне стоит приложение newrelic и я и оттуда могу наблюдать за жизнью проекта и если что реагировать.
еще есть django-newrelic-extensions и newrelic-plugin-agent
+3
Давно использую простой middleware, который позволяет прогнать любой View через профайлер и вывести результат прямо в браузер.
gist.github.com/ikatson/7426817

Естественно, без статистики, но для разработки (да и, честно говорят, для продакшена тоже) очень удобно :)

Платная версия NewRelic очень достойна, но и также дорога. Повезло как следует испытать платную версию во время их бесплатного периода.

Обычно бесплатной версии NewRelic + этого middleware + django-debug-toolbar хватает чтобы локализовать и нейтрализовать узкие места.
+2
Спасибо, хороший вариант.
В сочетании с функцией «Copy as cURL» в хроме:

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

Кстати, зачем тег «pre», ведь можно указать заголовок «Content-Type: text/plain»?
+1
Пытался вспомнить, зачем так сделал, проверил и вспомнил:

когда ставишь text/plain, строки, которые длиннее экрана, переносятся в браузере на следующую строку, вместо включения горизонтального скролла, и вывод, скажем, «print_callees=1» превращается в малочитабельную кашу. Естественно, только при просмотре в браузере (может быть даже только в Chrome).

Может быть это как-то можно обойти, но когда я писал этот скрипт несколько лет назад, это было не важно.
UPD: Быстрое гугление говорит, что по-простому это не обойти.

Но, в любом случае, спасибо, как минимум, комментария в коде этот хак заслужил.
+5
Метод «пристального взгляда» в первой программе у вас неправильно сработал. Вы изменили сам смысл программы, и в итоге она работает неправильно, например, на числе 246 = 2*3*41 наивный вариант выдаёт 41, а «оптимизированный» — 3.
+3
Ох ох ох, ваша правда. В реальной жизни, конечно, нужно всегда запускать тесты до и после оптимизации, а тут оказия вышла.
+4
Пусть в статье пока останется неправильный вариант, чтобы все видели, какой я неудачник.

Правильный вариант
"""Project Euler problem 3 solve"""
from __future__ import print_function
import math
import sys


def is_prime(num):
    """Checks if num is prime number"""
    for i in range(2, int(math.sqrt(num)) + 1):
        if not num % i:
            return False
    return True


def find_prime_factors(num):
    """Find prime factors of num"""
    result = []
    for i in range(1, int(math.sqrt(num)) + 1):
        if is_prime(i) and not num % i:
            result.append(i)
        if is_prime(num / i) and not num % i:
            result.append(num / i)
    if is_prime(num):
        result.append(i)
    return result


if __name__ == '__main__':
    try:
        num = int(sys.argv[1])
    except (TypeError, ValueError, IndexError):
        sys.exit("Usage: euler_3.py number")
    if num < 1:
        sys.exit("Error: number must be greater than zero")

    prime_factors = sorted(find_prime_factors(num))
    if len(prime_factors) == 0:
        print("Can't find prime factors of %d" % num)
    else:
        print("Answer: %d" % prime_factors[-1])
+1
Да, я в курсе, что ребята из «Project Euler» просят не выкладывать ответы и решения в общий доступ. Но ответ к задаче 3 гуглится (например, по условию «project euler problem 3 answer» на раз, поэтому я считаю, что ничего страшного в том, что я написал ответ нет.
Но всё же хотелось бы попросить вас скрыть правильные ответы за спойлером. Иначе решать самому становится менее интересно.
0
Эту задачу можно решить множеством способов на разных языках. Попробуйте придумать 10 решений…
+2
Еще IPython в профилировании помогает: там есть встроенные %prun, %%prun, %timeit и %%timeit, которые позволяют запускать cProfile и timeit над выражениями/ячейками. Если line_profiler и memory_profiler установить, то еще %lprun и %mprun добавляются. Очень удобно использовать с ipython notebook.

Из статистических профайлеров еще есть yappi, использовал его несколько лет назад; сейчас глянул в репозиторий — меньше суток назад последний коммит)
0
О, iPython — вообще отдельная история. Замечательнейший инструмент для отладки (и профилирования). Согласен, следует добавить в статью про "%prun, %%prun, %timeit и %%timeit" — сделаю!

Yappi не видел, обязательно ознакомлюсь и добавлю в статью =)
+1
and not num % i:

Лучше, все же, писать 'and num % i == 0:'

Потому что иначе, поскольку интересный для нас результат — равенство выражения нулю, непроизвольно ожидается, что num % i будет True в том случае, когда он равен нулю, и not ошибочно кажется излишним.
+1
Так как в итоге обстоит дело с профайлингом SQL запросов?

Дебаг тулбар мощный, но с ajax запросами не работает. Один мой товарищ написал специальную тулзу для дебаг-тулбара, чтобы через торнадо их перехватывать и выводить на отдельной странице, но это совсем жестко) к тому же дебаг тулбар использует свой jQuery что очень плохо.

Из альтернатив только Django-live-profiler? Он решает проблему ajax запросов?
0
У нас в проекте (Календарь Mail.ru) на отдельной странице «API Explorer» (из которой можно совершить любые AJAX-запросы с любыми параметрами) мы с помощью middleware сделали подмешивание всех SQL-запросов в JSON-ответ. В браузере на этой самой странице есть две вкладки: Result (JSON-ответ) и SQL. Соответственно, во второй вкладке видны все запросы и время выполнения каждого из них. Конечно, этот функционал доступен не всем пользователям =)

Универсального решения для профилирования SQL запросов в AJAX запросах я не встречал.
UFO landed and left these words here
Only those users with full accounts are able to leave comments.  , please.