Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
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 для удобства вывода цветных строк в консоль и парсеры атрибутов.
На сегодня все, прошлые питонячие радости смотрите по ссылке.