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

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

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

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

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

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

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

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

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

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

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

Правильный вариант
"""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])
Да, я в курсе, что ребята из «Project Euler» просят не выкладывать ответы и решения в общий доступ. Но ответ к задаче 3 гуглится (например, по условию «project euler problem 3 answer» на раз, поэтому я считаю, что ничего страшного в том, что я написал ответ нет.
Но всё же хотелось бы попросить вас скрыть правильные ответы за спойлером. Иначе решать самому становится менее интересно.
Эту задачу можно решить множеством способов на разных языках. Попробуйте придумать 10 решений…
Еще IPython в профилировании помогает: там есть встроенные %prun, %%prun, %timeit и %%timeit, которые позволяют запускать cProfile и timeit над выражениями/ячейками. Если line_profiler и memory_profiler установить, то еще %lprun и %mprun добавляются. Очень удобно использовать с ipython notebook.

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

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

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

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

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

Из альтернатив только Django-live-profiler? Он решает проблему ajax запросов?
У нас в проекте (Календарь 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. Log in, please.