Comments 25
UFO just landed and posted this here
Если честно, не в курсе, потому что не использую IDE в работе.
Гугл говорит, что вот это: pydev.org/ то, что нужно.
Гугл говорит, что вот это: pydev.org/ то, что нужно.
+3
UFO just landed and posted this here
Вопреки сложившимся мифам, нас в mail.ru не насилуют и не заставляют пользоваться продуктами компании в обязательном порядке. А ещё мы не поём гимны стоя по утрам и в целом — самые обычные люди.
У Google лучше результаты запросов на тему программирования по англоязычным ресурсам — это факт. Лучше, чем Поиск Mail.ru и лучше, чем Яндекс. У Поиска Mail.ru другие преимущества. Это моё субъективное мнение, если неправ — прошу поправить.
Или это троллинг такой толстый был а я типа такой наивный повёлся?
У Google лучше результаты запросов на тему программирования по англоязычным ресурсам — это факт. Лучше, чем Поиск Mail.ru и лучше, чем Яндекс. У Поиска Mail.ru другие преимущества. Это моё субъективное мнение, если неправ — прошу поправить.
Или это троллинг такой толстый был а я типа такой наивный повёлся?
+4
Пользуюсь newrelic уже пару лет и очень доволен. В айфоне стоит приложение newrelic и я и оттуда могу наблюдать за жизнью проекта и если что реагировать.
еще есть django-newrelic-extensions и newrelic-plugin-agent
еще есть django-newrelic-extensions и newrelic-plugin-agent
+2
Давно использую простой middleware, который позволяет прогнать любой View через профайлер и вывести результат прямо в браузер.
gist.github.com/ikatson/7426817
Естественно, без статистики, но для разработки (да и, честно говорят, для продакшена тоже) очень удобно :)
Платная версия NewRelic очень достойна, но и также дорога. Повезло как следует испытать платную версию во время их бесплатного периода.
Обычно бесплатной версии NewRelic + этого middleware + django-debug-toolbar хватает чтобы локализовать и нейтрализовать узкие места.
gist.github.com/ikatson/7426817
Естественно, без статистики, но для разработки (да и, честно говорят, для продакшена тоже) очень удобно :)
Платная версия NewRelic очень достойна, но и также дорога. Повезло как следует испытать платную версию во время их бесплатного периода.
Обычно бесплатной версии NewRelic + этого middleware + django-debug-toolbar хватает чтобы локализовать и нейтрализовать узкие места.
+3
Спасибо, хороший вариант.
В сочетании с функцией «Copy as cURL» в хроме:
можно прямо из консоли вызывать любые запросы сколько угодно раз и сразу видеть результат.
Кстати, зачем тег «pre», ведь можно указать заголовок «Content-Type: text/plain»?
В сочетании с функцией «Copy as cURL» в хроме:
можно прямо из консоли вызывать любые запросы сколько угодно раз и сразу видеть результат.
Кстати, зачем тег «pre», ведь можно указать заголовок «Content-Type: text/plain»?
+2
Пытался вспомнить, зачем так сделал, проверил и вспомнил:
когда ставишь text/plain, строки, которые длиннее экрана, переносятся в браузере на следующую строку, вместо включения горизонтального скролла, и вывод, скажем, «print_callees=1» превращается в малочитабельную кашу. Естественно, только при просмотре в браузере (может быть даже только в Chrome).
Может быть это как-то можно обойти, но когда я писал этот скрипт несколько лет назад, это было не важно.
UPD: Быстрое гугление говорит, что по-простому это не обойти.
Но, в любом случае, спасибо, как минимум, комментария в коде этот хак заслужил.
когда ставишь text/plain, строки, которые длиннее экрана, переносятся в браузере на следующую строку, вместо включения горизонтального скролла, и вывод, скажем, «print_callees=1» превращается в малочитабельную кашу. Естественно, только при просмотре в браузере (может быть даже только в Chrome).
Может быть это как-то можно обойти, но когда я писал этот скрипт несколько лет назад, это было не важно.
UPD: Быстрое гугление говорит, что по-простому это не обойти.
Но, в любом случае, спасибо, как минимум, комментария в коде этот хак заслужил.
+1
Метод «пристального взгляда» в первой программе у вас неправильно сработал. Вы изменили сам смысл программы, и в итоге она работает неправильно, например, на числе 246 = 2*3*41 наивный вариант выдаёт 41, а «оптимизированный» — 3.
+5
Ох ох ох, ваша правда. В реальной жизни, конечно, нужно всегда запускать тесты до и после оптимизации, а тут оказия вышла.
+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])
+4
Да, я в курсе, что ребята из «Project Euler» просят не выкладывать ответы и решения в общий доступ. Но ответ к задаче 3 гуглится (например, по условию «project euler problem 3 answer» на раз, поэтому я считаю, что ничего страшного в том, что я написал ответ нет.Но всё же хотелось бы попросить вас скрыть правильные ответы за спойлером. Иначе решать самому становится менее интересно.
+1
Еще IPython в профилировании помогает: там есть встроенные %prun, %%prun, %timeit и %%timeit, которые позволяют запускать cProfile и timeit над выражениями/ячейками. Если line_profiler и memory_profiler установить, то еще %lprun и %mprun добавляются. Очень удобно использовать с ipython notebook.
Из статистических профайлеров еще есть yappi, использовал его несколько лет назад; сейчас глянул в репозиторий — меньше суток назад последний коммит)
Из статистических профайлеров еще есть yappi, использовал его несколько лет назад; сейчас глянул в репозиторий — меньше суток назад последний коммит)
+2
and not num % i:
Лучше, все же, писать 'and num % i == 0:'
Потому что иначе, поскольку интересный для нас результат — равенство выражения нулю, непроизвольно ожидается, что num % i будет True в том случае, когда он равен нулю, и not ошибочно кажется излишним.
+1
Так как в итоге обстоит дело с профайлингом SQL запросов?
Дебаг тулбар мощный, но с ajax запросами не работает. Один мой товарищ написал специальную тулзу для дебаг-тулбара, чтобы через торнадо их перехватывать и выводить на отдельной странице, но это совсем жестко) к тому же дебаг тулбар использует свой jQuery что очень плохо.
Из альтернатив только Django-live-profiler? Он решает проблему ajax запросов?
Дебаг тулбар мощный, но с ajax запросами не работает. Один мой товарищ написал специальную тулзу для дебаг-тулбара, чтобы через торнадо их перехватывать и выводить на отдельной странице, но это совсем жестко) к тому же дебаг тулбар использует свой jQuery что очень плохо.
Из альтернатив только Django-live-profiler? Он решает проблему ajax запросов?
+1
У нас в проекте (Календарь Mail.ru) на отдельной странице «API Explorer» (из которой можно совершить любые AJAX-запросы с любыми параметрами) мы с помощью middleware сделали подмешивание всех SQL-запросов в JSON-ответ. В браузере на этой самой странице есть две вкладки: Result (JSON-ответ) и SQL. Соответственно, во второй вкладке видны все запросы и время выполнения каждого из них. Конечно, этот функционал доступен не всем пользователям =)
Универсального решения для профилирования SQL запросов в AJAX запросах я не встречал.
Универсального решения для профилирования SQL запросов в AJAX запросах я не встречал.
0
UFO just landed and posted this here
Sign up to leave a comment.
Профилирование и отладка Python, переходим к практике