Python Community
12.9K subscribers
1.25K photos
38 videos
15 files
739 links
Python Community RU - СНГ сообщество Python-разработчиков

Чат канала: @python_community_chat

Сотрудничество: @cyberJohnny и @Sergey_bzd

РКН реестр:
https://knd.gov.ru/license?id=67847dd98e552d6b54a511ed&registryType=bloggersPermission
Download Telegram
🎯 Хочешь следить за загрузкой своей GPU прямо из Python?

Вот простой скрипт, который показывает текущую загрузку видеокарты NVIDIA (через `nvidia-smi`). Подходит для мониторинга в ML-задачах, инференсе и просто для интереса.

📦 Зависимости: установленный nvidia-smi и Python 3.6+

🧠 Код:


import subprocess

def get_gpu_utilization():
try:
result = subprocess.check_output(
['nvidia-smi', '--query-gpu=utilization.gpu,memory.used,memory.total',
'--format=csv,nounits,noheader'],
encoding='utf-8'
)
lines = result.strip().split('\n')
for idx, line in enumerate(lines):
gpu_util, mem_used, mem_total = map(str.strip, line.split(','))
print(f"🖥 GPU {idx}: {gpu_util}% load | {mem_used} MiB / {mem_total} MiB")
except FileNotFoundError:
print(" nvidia-smi not found. Make sure NVIDIA drivers are installed.")
except Exception as e:
print(f"⚠️ Error: {e}")

get_gpu_utilization()


📊 Вывод будет примерно такой:

GPU 0: 23% load | 412 MiB / 8192 MiB

🔥 Советы:
• Можно запускать в цикле для live-мониторинга
• Легко интегрировать в Telegram-бота или Slack-уведомления
• Работает на всех машинах с установленным NVIDIA драйвером и nvidia-smi



@Python_Community_ru
⚡️ PyOpenCL — ускоряем Python вычисления на GPU. Этот проект даёт доступ к технологии OpenCL прямо из Python, позволяя задействовать не только видеокарты, но и любые параллельные вычислительные устройства. Он сочетает низкоуровневый контроль с автоматической обработкой ошибок и привязкой жизненного цикла объектов.

Инструмент имеет обширную документацию с примерами: от простого поэлементного умножения массивов до сложных алгоритмов с использованием локальной памяти GPU. Проект работает с реализациями OpenCL от Apple, AMD и Nvidia, а установка через Conda занимает буквально пару команд.

🤖 GitHub (https://github.com/inducer/pyopencl)



@Python_Community_ru
🧩 Задача для разминки

Что выведет этот код? Попробуй догадаться без запуска.


class Sneaky:
def __eq__(self, other):
print("Comparing!")
return True

a = Sneaky()
b = [a]

print(a in b)
print(a == b[0])
print(b.count(a))


🤔 Подумай: сколько раз вызовется eq?

🎯 Разбор:

print(a in b)
🔍 Проверка a in b вызывает b.__contains__(a), который по умолчанию использует ==.
👉 Вызовется eq, будет True.

print(a == b[0])
🔍 Прямое сравнение — снова eq.

print(b.count(a))
🔍 list.count сравнивает каждый элемент с ==. В нашем списке один элемент — a.
👉 Опять вызывается eq.

💥 Вывод будет:


Comparing!
True
Comparing!
True
Comparing!
1


📌 Вывод: __eq__ сработал 3 раза, и каждый раз напечатал "Comparing!".

🧠 Уловка: Python-списки используют ==, даже если это один и тот же объект! Да, a == a всё равно вызовет __eq__, если он определён.

⚠️ Фишка для интервью:
Можно подменить поведение ==, но is (сравнение идентичности) всегда быстрее и не вызывает магии.



@Python_Community_ru
🔥 CAI — ИИ для поиска багов от Alias Robotics

Что это такое?
CAI — лёгкий фреймворк для создания AI-агентов, которые помогают автоматизировать поиск и проверку уязвимостей.

Как это работает?
- Загружаете YAML-конфиги
Опишите сценарии поиска багов, тестов и отчётов в простых текстовых файлах.
- LLM-агенты
AI-модель эмулирует протоколы (SSH, HTTP, TCP и другие) и взаимодействует с целевыми системами как настоящий тестировщик.
- Генерация и «разогрев» данных
Создавайте синтетические запросы для обучения и быстро запускайте агента на своих данных.
- Оффлайн-оценка
Собирайте результаты тестов и анализируйте их без постоянного подключения к интернету.

Зачем использовать CAI?
- Ускоряет подготовку и запуск тестов безопасности
- Позволяет гибко настраивать шаги проверки
- Повышает прозрачность и повторяемость отчётов о найденных уязвимостях

Установка и запуск:

git clone https://github.com/aliasrobotics/cai.git
cd cai
# отредактируйте config.yaml и запустите агента


📌 Github (https://github.com/aliasrobotics/cai)



@Python_Community_ru
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
📊 Vizro — low-code инструмент для создания дашбордов на Python. Интересный проект для аналитиков и дата-инженеров, позволяющий собирать интерактивные дашборды буквально в несколько строк кода. Основан на связке Plotly + Dash + Pydantic, но скрывает сложность за простым декларативным синтаксисом в JSON/YAML/Python-словарях.

Библиотека имеет встроенные best practices по визуализации данных и возможность кастомизировать всё через Python/JS, когда low-code возможностей недостаточно. Готовые дашборды выглядят профессионально и сразу готовы к продакшену.

🤖 GitHub (https://github.com/mckinsey/vizro)



@Python_Community_ru
👾 GREMLLM — теперь у ваших багов есть сознание

GREMLLM — это необычный Python-класс, в котором все методы и свойства создаются динамически с помощью LLM. Вы описываете, *что за объект вы хотите*, и дальше GREMLLM сам решает, что должно происходить при вызове методов или обращении к полям.

📦 Установка:

pip install gremllm


🔧 Пример:



from gremllm import Gremllm

counter = Gremllm('counter')
counter.value = 5
counter.increment()
print(counter.value) # → 6?
print(counter.to_roman_numerals()) # → VI?


🧩 Возможности:
– Динамическое поведение: всё определяется "на лету" с помощью LLM
– Поддержка OpenAI, Claude, Gemini, и локальных моделей
– Wet Mode: можно строить цепочки вызовов (методы возвращают объекты)
– Verbose Mode: выводит, какой код был сгенерирован
– Умная обработка ошибок и настройка через наследование

⚠️ Это экспериментальный инструмент. Не для продакшена. Но очень интересен для изучения LLM-интеграций в Python-код.

🔗 Репозиторий: https://github.com/ur-whitelab/gremllm



@Python_Community_ru
🤔2🔥1
Ускорь Python без переписывания — скомпилируй код в .so через Cython

Нужно ускорить медленные куски Python-кода (циклы, численные вычисления, парсинг)?

Не обязательно лезть в C или переписывать всё под NumPy. Можно взять свой .py`-файл, добавить одну строчку и превратить его в бинарный .so`‑модуль через Cython — без изменения логики.



# 1. Устанавливаем Cython и компилятор
pip install cython
sudo apt install build-essential

# 2. Переименовываем файл
mv myscript.py myscript.pyx

# 3. Создаём setup.py
echo '
from setuptools import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize("myscript.pyx"))
' > setup.py

# 4. Компилируем
python3 setup.py build_ext --inplace

# 5. Используем как обычный модуль
python3 -c 'import myscript; myscript.main()'


@pytonl

@Python_Community_ru
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Ускорь import в Python-проектах с помощью lazy loading — без изменения логики

Если у тебя проект с тяжёлыми модулями (`pandas`, torch, tensorflow`), но они не всегда нужны — не загружай их зря. Python позволяет **отложить импорт до первого использования**, через встроённый `importlib.

Вот как это выглядит на практике:



import importlib

# Обёртка для ленивого импорта
def lazy_import(name):
return importlib.util.LazyLoader(importlib.import_module(name))

# Использование
np = lazy_import('numpy')
# numpy ещё не загружен

# Теперь загрузится:
print(np.array([1, 2, 3]))



@Python_Community_ru
🧠 Как превратить любой Python-объект в читаемый словарь — даже если это класс с кучей вложенных полей

Когда работаешь с API, логами или дебажишь сложные объекты — хочется увидеть весь объект как словарь, без .__dict__, без сериализации, без ручного разбора.

Вот приём, который делает это рекурсивно, красиво и гибко — с помощью dataclasses и asdict, даже если объект не был dataclass изначально.

python
from dataclasses import dataclass, asdict, is_dataclass
from types import SimpleNamespace

def deep_to_dict(obj):
if isinstance(obj, dict):
return {k: deep_to_dict(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [deep_to_dict(i) for i in obj]
elif is_dataclass(obj):
return asdict(obj)
elif isinstance(obj, SimpleNamespace):
return deep_to_dict(vars(obj))
elif hasattr(obj, '__dict__'):
return deep_to_dict(vars(obj))
else:
return obj


🧠 Рекурсивный разбор любых Python-объектов

📌 Подходит для логирования, сериализации, отладки
📌 Работает с dataclass, обычными классами, объектами из types, JSON-like структурами
📌 Можно расширить: добавить фильтрацию полей, вывод в YAML или сохранение в файл

Теперь любой “монстр из API” — превращается в читаемый словарь за одну строчку.

@Python_Community_ru
🌟 Odigos — распределенный трейсинг без модификации кода. Этот open-source проект меняет правила игры в observability-инструментах. Инструмент умеет автоматически генерировать распределенные трейсы для приложений на Java, Python, .NET, Node.js и Go без необходимости правки исходного кода.

Под капотом используется eBPF для низкоуровневой инструментации, что особенно ценно для скомпилированных языков вроде Go. Трейсы сразу экспортируются в формате OpenTelemetry, что позволяет интегрироваться с любыми совместимыми системами мониторинга.

🤖 GitHub (https://github.com/odigos-io/odigos)



@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ Подменяй любые импорты в Python “на лету” — без изменения кода

Если ты хочешь протестировать модуль, подменить зависимость, замокать внешний сервис или обмануть импорт — не обязательно редактировать исходники. Python позволяет перехватывать импорты прямо во время выполнения, через sys.modules.

Вот минимальный приём, который делает это прозрачно:


import sys
import types

# Создаём фейковый модуль
fake = types.SimpleNamespace()
fake.get_data = lambda: "подмена работает"

# Подменяем импорт
sys.modules['external_service'] = fake

# Теперь даже import будет работать
import external_service
print(external_service.get_data()) # → "подмена работает"



@Python_Community_ru
🚀 Быстрый HTTP‑сервер на базе asyncio.Protocol

В этом гайде показано как создать минималистичный HTTP‑сервер на Python, используя низкоуровневый API asyncio.Protocol, что делает его быстрее и гибче, чем решения на основе asyncio.Streams или фреймворков типа FastAPI.

Основные пункты:

1. Сокет-обработчик (`ConnectionHandler`)
- Наследуется от asyncio.Protocol — реакции на события connection_made, data_received, connection_lost.
- Хранит буфер, транспорт и маппинг маршрутов.

2. Парсинг HTTP-запросов
- В data_received накапливаются байты.
- Запрос считается полным при обнаружении \r\n\r\n.
- Затем из заголовков извлекаются method, path, другие поля.

3. Маршрутизация через декоратор
- Класс HTTPServer собирает функции-обработчики для путей.
- Обработчик вызывает либо корутины, либо возвращает статический HTML.

4. Отправка ответа
- Используется asyncio.create_task внутри колбэка, чтобы запустить send_response — где формируется ответ с HTTP-кодом, заголовками и телом.
- После write() соединение закрывается.

5. Простой запуск сервера
- Через loop.create_server() создаётся экземпляр ConnectionHandler.
- serve_forever() запускает обработку соединений.

6. Высокая производительность
Сервер обрабатывает ~100 000 запросов за ~4.2 с при нагрузке 100 одновременных соединений, в то время как FastAPI справляется за ~32 с :contentReference[oaicite:1]{index=1}.

Зачем это полезно:

- Полный контроль над TCP-соединениями и буферами.
- Существенно выше скорость при простых HTTP-API.
- Отличная демонстрация возможностей, которые остаются скрытыми за высокоуровневыми фреймворками.

Поддержка сообщества:
На Reddit статья получила высокую оценку как "отличный материал по Asyncio Protocols"

https://jacobpadilla.com/articles/asyncio-protocols



@Python_Community_ru
🔥2
🐍 20 ещё более продвинутых однострочников на Python — часть 3

Если ты уже пишешь на Python профессионально, вот ещё приёмы, которые реально экономят строки и читаются на лету:

1. 🗃️ Группировка по ключу без pandas

groups = defaultdict(list); [groups[k].append(v) for k, v in data]


2. 🪄 Быстрое глубокое копирование объекта

copy = pickle.loads(pickle.dumps(obj, -1))


3. 📤 Отправка JSON через POST

r = requests.post(url, json=payload)


4. 📌 Проверка, что файл — это символическая ссылка

is_symlink = Path(p).is_symlink()


5. 🧩 Быстрое объединение нескольких словарей

merged = {**d1, **d2, **d3}


6. 🧪 Проверить, что список отсортирован

is_sorted = all(a

@Python_Community_ru
🖥 Полезный, но редко используемый приём: динамическое управление множеством контекст-менеджеров через `contextlib.ExitStack`

Если вам нужно открыть *N* файлов, захватить *M* блокировок или временно изменить кучу настроек, а их количество известно только во время выполнения, традиционный with … as …: не подойдёт. Вместо «пирамиды» вложенных with воспользуйтесь ExitStack:


from contextlib import ExitStack

filenames = ["a.log", "b.log", "c.log"]

with ExitStack() as stack:
files = [stack.enter_context(open(name)) for name in filenames]

# теперь у вас список открытых файлов, с которыми можно работать
for f in files:
print(f.readline())
# здесь ExitStack автоматически закроет все файлы, даже если их было 1000


Почему это круто

- Управляет произвольным числом контекстов: добавляете их в цикл, условно, через функции-фабрики.
- Гарантирует корректный rollback при исключениях: всё, что добавлено в ExitStack, будет закрыто в обратном порядке.
- Упрощает сложную инициализацию: можно динамически «подключать» то, что нужно именно сейчас (файлы, блокировки, сетевые соединения).

🔧 Где пригодится

- Пакетная обработка файлов и архивов.
- Тестовые стенды с кучей временных ресурсов.
- Плагины, которые могут регистрировать собственные контекст-менеджеры.

Теперь никакого «каскада из with» — один аккуратный ExitStack.



@Python_Community_ru
📊 Python for Nonprofits — книга и код для анализа данных в НКО

Это полноценное учебное пособие по Python, заточенное под нужды некоммерческих организаций.

Автор — Kenneth Burchfiel — собрал в одном репозитории и книгу, и рабочие блокноты для реального анализа данных.

Импорт и очистка данных (CSV, API, Google Sheets)
Описательная статистика, линейные регрессии
Визуализация: графики, интерактивные карты (Plotly, Folium)
Dash-приложения и публикация дашбордов
Всё оформлено как Jupyter-книга: можно читать, запускать, менять

Кому подойдёт:
– начинающим дата-аналитикам, которые хотят делать полезные проекты
– НКО, работающим с открытыми данными и отчётами
– преподавателям, ищущим учебный курс по Python с практикой

💡 Можно читать онлайн или скачать как книгу. Лицензия MIT — можно использовать где угодно.

📘 Подробнее и исходники: https://github.com/kburchfiel/pfn



@Python_Community_ru
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
🛠 Вышел новый генератор CAD‑моделей по чертежам — и он реально работает!

GenCAD умеет превращать чертежи в 3D‑модели и сразу генерирует параметрический CAD‑код. Для сложных и детализированных объектов он пока не подойдет, но с простыми деталями вроде винтиков и креплений справляется отлично.

📎 Идеально для быстрого прототипирования стандартных элементов.

📄 Paper: https://openreview.net/pdf?id=e817c1wEZ6
🔗 Website: https://gencad.github.io
💻 Code: https://github.com/ferdous-alam/GenCAD



@Python_Community_ru