pyinstrument

При долгой работе с большим проектом так или иначе упираешься в поиск узких мест в коде. Что только программисты не используют для этого — от навороченных профайлеров и брейкпоинтов до выводов print и замеров времени выполнения вручную с выводом таймстампов на консоль.

Теперь в свой арсенал можно добавить профайлер pyinstrument. Традиционные профайлеры по шагам отслеживают выполнение программы, а pyinstrument реализуется концепцию статистического профайлинга — это когда профайлер не вмешивается в выполнение кода, а лишь записывает состояние стека вызова с определенной периодичностью.

Такой подход снижает тормоза при профилировании программы. Видно, что оверхед на статистическое профилирование несравнимо меньше, чем при применении стандартных профайлеров.

Пользоваться профайлерм просто — он встраивается напрямую в код. Можно отпрофилировать лишь участок кода, нет нужды смотреть весь стек вызовов.

from pyinstrument import Profiler

profiler = Profiler()
profiler.start()

# Ваш код для профилирования

profiler.stop()

print(profiler.output_text(unicode=True, color=True))

В документации предлагается решение для профилирования запросов API в веб приложениях.

from flask import Flask, g, make_response, request
app = Flask(__name__)

@app.before_request
def before_request():
    if "profile" in request.args:
        g.profiler = Profiler()
        g.profiler.start()


@app.after_request
def after_request(response):
    if not hasattr(g, "profiler"):
        return response
    g.profiler.stop()
    output_html = g.profiler.output_html()
    return make_response(output_html)

Mimesis

Когда программисты пишут базовые тесты для своего кода, в приложении появляются пользователи с именем qwerty, фамилией asdf  и живущие в городе zxcv. Оно и понятно — надо писать код, а не сидеть и придумывать имена тестовым юзерам. Но у действительно крутых спецов даже тесты выглядят аккуратно и с вниманием к деталям.  А самые крутые из крутых используют генераторы реалистичных тестовых данных. 

Mimesis генерирует реалистичные тестовые данные для имен, фамилий, емейлов и прочих полей, над генерацией значений для которых обычно нет времени думать.

>>> from mimesis import Person
>>> person = Person('en')

>>> person.full_name()
'Brande Sears'

>>> person.email(domains=['mimesis.name'])
'roccelline1878@mimesis.name'

>>> person.email(domains=['mimesis.name'], unique=True)
'f272a05d39ec46fdac5be4ac7be45f3f@mimesis.name'

>>> person.telephone(mask='1-4##-8##-5##3')
'1-436-896-5213

Есть поддержка генерации фейковых данных для разных локалей.

>>> from mimesis import Person
>>> from mimesis.enums import Gender

>>> de = Person('de')
>>> en = Person('en')

>>> de.full_name(gender=Gender.FEMALE)
'Sabrina Gutermuth'

>>> en.full_name(gender=Gender.MALE)
'Layne Gallagher'

kb

Чтобы вести успешную профессиональную деятельность в ИТ, недостаточно каждый день приходить на работу и писать код. Нужно еще и учиться. Алгоритмы, новые архитектурные решения, полезные библиотеки и приемы написания кода — все это приходиться изучать и запоминать. Большинство из известных мне успешных инженеров в том или ином формате ведет свою базу знаний с конспектами статей, ссылками и сниппетами кода. 

В большинстве случаев это специализированный софт для ведения заметок или репозитории с чем-то типа markdown внутри. 

А сейчас мы посмотрим инструмент для хадкорных тру инженеров. kb — консольная база знаний, написанная на Python.

  • Работает 100% из консоли. Можно, например, запустить на сервере.

  • Есть экспорт и импорт, можно хранить данные в своем репозитории.

  • Можно хранить двоичные данные — pdf, картинки, книги.

  • Есть все фичи хорошей базы знаний — теги, категории, шаблоны заметок, поиск.

Исходники системы — интересное чтение. Весь консольный UX реализован авторами самостоятельно,  из зависимостей они используют только colored для удобства вывода цветных строк в консоль и парсеры атрибутов.

На сегодня все, прошлые питонячие радости смотрите по ссылке.