🛠 Что посмотреть: как создать продвинутый MCP-сервер на Python
MCP-сервер — это лёгкий, независимый сервер на Python, который обрабатывает запросы через собственный протокол (Message Control Protocol).
💡 Без Flask, FastAPI и Django — только чистый сокет и логика.
Что в видео:
— Как работает MCP-протокол
— Обработка сообщений и структура сервера
— Авторизация через Stytch (не просто access token)
— Хранение пользовательских заметок
— Как адаптировать под свой проект (API, чат, внутренний сервис)
🔗 Смотреть туториал: https://clc.to/UcCggQ
Библиотека питониста #буст
MCP-сервер — это лёгкий, независимый сервер на Python, который обрабатывает запросы через собственный протокол (Message Control Protocol).
💡 Без Flask, FastAPI и Django — только чистый сокет и логика.
Что в видео:
— Как работает MCP-протокол
— Обработка сообщений и структура сервера
— Авторизация через Stytch (не просто access token)
— Хранение пользовательских заметок
— Как адаптировать под свой проект (API, чат, внутренний сервис)
🔗 Смотреть туториал: https://clc.to/UcCggQ
Библиотека питониста #буст
👍8❤7🔥3
👉 Мифы и сказки вокруг производительности Python
🔎 Миф 1: «Python не медленный» (а то мы не знали)
Многие считают, что Python достаточно быстр, ведь это язык-«клей», где для тяжёлых вычислений используют GPU или вызывают C/C++/Rust-библиотеки. Но на самом деле, для множества задач Python всё же медленен.
🔎 Миф 2: «Если медленно, перепиши горячие участки на C/C++/Rust»
Это действительно часто помогает — оптимизировать 20% кода, где происходит 80% работы (принцип Парето). Однако Amdahl's law говорит, что ускорение одной части программы в итоге упирается в остальной код. После ускорения «горячих» мест, всё остальное начинает доминировать по времени исполнения.
🔎 Миф 3: «Python медленный, потому что он интерпретируемый»
Интерпретация даёт некоторое замедление, но гораздо больше времени уходит на выполнение динамической семантики Python: поиск типов, вызовы методов вроде
🔎 Статическая типизация и JIT — помогают, но не решают всё
Python набирает популярность с аннотациями типов, но статическая типизация не проверяется во время выполнения. Например:
Здесь добавление строк работает, но не соответствует типам. Значит, оптимизации на основе типов невозможны в чистом Python.
JIT-компиляторы (например, в PyPy) действительно могут ускорить Python, но они усложняют предсказуемость производительности и требуют понимания, как именно JIT оптимизирует код. Иногда оптимизации «ломаются» при изменении программы, даже если код кажется простым.
🔎 Абстракции в Python — не бесплатны
Рассмотрим простой алгоритм:
Если вынести вычисление в отдельную функцию:
То производительность падает из-за накладных расходов на вызовы функций. Если вместо кортежей использовать
Скорость падает ещё больше, потому что добавляется обращение к атрибутам объектов и накладные расходы, связанные с объектной моделью.
🔎 Кэш и память — главный узкий профиль
Основная проблема Python — не вычисления, а память. Современные процессоры быстро выполняют операции, но доступ к памяти (особенно к ОЗУ) намного медленнее.
Python-программы часто имеют плохую кэш-локалити из-за разброса объектов в памяти:
В памяти объекты
Это проблема, которую невозможно решить только компиляцией или JIT, не изменяя семантику языка.
🔗 Если интересно, почему Python медленный, посмотрите подробный доклад: https://clc.to/YWmMIA
Библиотека питониста #буст
Многие считают, что Python достаточно быстр, ведь это язык-«клей», где для тяжёлых вычислений используют GPU или вызывают C/C++/Rust-библиотеки. Но на самом деле, для множества задач Python всё же медленен.
Это действительно часто помогает — оптимизировать 20% кода, где происходит 80% работы (принцип Парето). Однако Amdahl's law говорит, что ускорение одной части программы в итоге упирается в остальной код. После ускорения «горячих» мест, всё остальное начинает доминировать по времени исполнения.
Интерпретация даёт некоторое замедление, но гораздо больше времени уходит на выполнение динамической семантики Python: поиск типов, вызовы методов вроде
__getattribute__()
, упаковку и распаковку значений, выделение памяти и т.д. Это не зависит от того, интерпретируется код или компилируется.Python набирает популярность с аннотациями типов, но статическая типизация не проверяется во время выполнения. Например:
def add(x: int, y: int) -> int:
return x + y
print(add('hello ', 'world')) # type: ignore
Здесь добавление строк работает, но не соответствует типам. Значит, оптимизации на основе типов невозможны в чистом Python.
JIT-компиляторы (например, в PyPy) действительно могут ускорить Python, но они усложняют предсказуемость производительности и требуют понимания, как именно JIT оптимизирует код. Иногда оптимизации «ломаются» при изменении программы, даже если код кажется простым.
Рассмотрим простой алгоритм:
def algo(points: list[tuple[float, float]]):
res = 0
for x, y in points:
res += x**2 * y + 10
return res
Если вынести вычисление в отдельную функцию:
def fn(x, y):
return x**2 * y + 10
def algo(points: list[tuple[float, float]]):
res = 0
for x, y in points:
res += fn(x, y)
return res
То производительность падает из-за накладных расходов на вызовы функций. Если вместо кортежей использовать
@dataclass
:from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
def fn(p: Point):
return p.x**2 * p.y + 10
def algo(points: list[Point]):
res = 0
for p in points:
res += fn(p)
return res
Скорость падает ещё больше, потому что добавляется обращение к атрибутам объектов и накладные расходы, связанные с объектной моделью.
Основная проблема Python — не вычисления, а память. Современные процессоры быстро выполняют операции, но доступ к памяти (особенно к ОЗУ) намного медленнее.
Python-программы часто имеют плохую кэш-локалити из-за разброса объектов в памяти:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = [Person('Alice', 16), Person('Bob', 21)]
В памяти объекты
Person
и их атрибуты могут быть разбросаны, что приводит к множеству переходов по указателям и к частым кеш-промахам.Это проблема, которую невозможно решить только компиляцией или JIT, не изменяя семантику языка.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥1😁1
Холивар: запускать все тесты — или только нужные
Вопрос для питонистов: что лучше — полный прогон тестов при каждом пуше или выборочный запуск только нужных?
⚡️ Сторонники выборочного запуска говорят:
— «Мы изменили одну функцию в
— CI отрабатывает за 5 минут, а не за 40
— Меньше простаивания разработчиков в ожидании билдов
— Логи чище, меньше случайных падений
🐢 Сторонники полного прогона отвечают:
— «Вчера просто поправили формат даты в
— Легче отлавливать неожиданные регрессии
— Нет сюрпризов после релиза
— CI — это страховка, а не ускоритель
Вот, например, кто-то предложил использовать Snob — инструмент, который экономит время и деньги, анализируя граф зависимостей Python-проекта и выбирая для запуска только те тесты, которые реально затронуты изменениями в коде.
📌 Что делает Snob:
— Отбрасывает ~99% тестов, не связанных с изменениями
— Ускоряет разработку и снижает стоимость CI
— Работает на основе статических импортов, а не предсказаний
— Не заменяет полный регрессионный прогон, но сильно помогает при разработке больших кодовых баз
⚠️ Чего Snob не делает:
— Не ловит динамические импорты, сайд-эффекты во время выполнения и другие неявные зависимости
💬 А теперь вопрос — вы бы доверили такому инструменту свой пайплайн, или всё-таки только полный прогон даёт спокойствие?
Библиотека питониста #междусобойчик
Вопрос для питонистов: что лучше — полный прогон тестов при каждом пуше или выборочный запуск только нужных?
⚡️ Сторонники выборочного запуска говорят:
— «Мы изменили одну функцию в
utils.py
— зачем нам прогонять тесты на API, авторизацию и экспорт в Excel?»— CI отрабатывает за 5 минут, а не за 40
— Меньше простаивания разработчиков в ожидании билдов
— Логи чище, меньше случайных падений
🐢 Сторонники полного прогона отвечают:
— «Вчера просто поправили формат даты в
utils.py
, и тихо умер отчёт в аналитике — в тестах API это бы поймали»— Легче отлавливать неожиданные регрессии
— Нет сюрпризов после релиза
— CI — это страховка, а не ускоритель
Вот, например, кто-то предложил использовать Snob — инструмент, который экономит время и деньги, анализируя граф зависимостей Python-проекта и выбирая для запуска только те тесты, которые реально затронуты изменениями в коде.
📌 Что делает Snob:
— Отбрасывает ~99% тестов, не связанных с изменениями
— Ускоряет разработку и снижает стоимость CI
— Работает на основе статических импортов, а не предсказаний
— Не заменяет полный регрессионный прогон, но сильно помогает при разработке больших кодовых баз
⚠️ Чего Snob не делает:
— Не ловит динамические импорты, сайд-эффекты во время выполнения и другие неявные зависимости
💬 А теперь вопрос — вы бы доверили такому инструменту свой пайплайн, или всё-таки только полный прогон даёт спокойствие?
Библиотека питониста #междусобойчик
❤8👍1
🧐 Зоопарк моделей в ML: с чего начать?
Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.
Кажется, придётся учить всё это, иначе в ML не пустят.
Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.
Важно: не распыляйся на всё подряд. Начни с базового — это фундамент, на котором держится остальное.
👉 Успей попасть на курс «ML для старта в Data Science»
Открываешь статью по машинному обучению — и в тебя летят слова: трансформеры, бустинги, SVM, регрессии.
Кажется, придётся учить всё это, иначе в ML не пустят.
Хорошая новость: 90% задач можно закрыть 2–3 классическими методами. Разберёшь их — уже сможешь собирать работающие проекты. А хайповые названия подождут.
Важно: не распыляйся на всё подряд. Начни с базового — это фундамент, на котором держится остальное.
👉 Успей попасть на курс «ML для старта в Data Science»
👍1
📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
👍7❤2❤🔥1
👍 Важные обновления популярных библиотек
— pydantic-ai / pydantic-ai-slim / pydantic-evals / pydantic-graph 0.6.0 — развитие AI-интеграций на базе Pydantic.
— torch 2.8.0, torchvision 0.23.0, torchaudio 2.8.0 — крупное обновление PyTorch-стека.
— sagemaker 2.250.0 — новая версия фреймворка для ML на AWS.
— memray 1.18.0 — профайлер памяти для Python.
— locust 2.38.0 — нагрузочное тестирование.
— redis 6.3.0 — Python-клиент Redis.
— openai 1.99.0 — доступ к API OpenAI, включая GPT-5.
— hypothesis 6.137.0 — property-based тестирование.
— accelerate 1.10.0 — ускорение обучения моделей.
— sentence-transformers 5.1.0 — эмбеддинги и семантический поиск.
— deepdiff 8.6.0 — сравнение сложных Python-структур.
🔥 Опыт других
— Python: генераторные функции
— Как я заменил кучу флагов двумя словарями в Python
— 15 типичных ошибок начинающих автоматизаторов (и как их избежать)
Библиотека питониста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍2
Forwarded from Библиотека задач по Data Science | тесты, код, задания
Backend Python/Django — от 3000 до 6000 $, удалёнка
Python Developer — до 170 000 ₽, удалёнка
Odoo/Python разработчик — до 200 000 ₽, удалёнка
Архитектор в AI проектах, удалёнка
Backend Lead (Python/Go), удалёнка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3😁3
В реальном мире строки редко совпадают «под копирку».
Например:
"aPpLe iPhone® 14 Pro Max"
"iphone 14 pro max"
Вопрос — чем сравнивать? Ответ зависит от того, что именно вы хотите поймать.
Идеален как первый шаг: убрать мусор, стандартизировать формат.
import re
def clean(t):
t = t.lower()
t = re.sub(r"[®™©]", "", t)
return re.sub(r"\s+", " ", t).strip()
clean("iPhone® 14 Pro Max")
# 'iphone 14 pro max'
Умеет считать похожесть на уровне символов. Отлично для быстрого «на коленке».
from difflib import SequenceMatcher
SequenceMatcher(None, "iphone 14 pro max", "i phone 14 pro max").ratio()
# 0.97
Оптимизированный под скорость и адекватнее реагирует на перестановку слов.
from rapidfuzz import fuzz
fuzz.WRatio("apple iphone 14 pro max", "iphone 14 pro max apple")
# 95
Нейросети, которые понимают значение, а не только текстовый паттерн.
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
m = SentenceTransformer('all-MiniLM-L6-v2')
cosine_similarity(
[m.encode("wireless headphones")],
[m.encode("bluetooth earbuds")]
)[0][0]
# 0.75
—
re
→ всегда первым шагом—
difflib
→ мелкие задачи без зависимостей—
RapidFuzz
→ продакшн, большие объёмы, сложные текстовые вариации—
Sentence Transformers
→ смысл важнее скорости, есть GPU#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍2🔥1