pythonl | Unsorted

Telegram-канал pythonl - Python/ django

52807

по всем вопросам @haarrp @itchannels_telegram - 🔥 best it channels @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - ml 📚 @pythonlbooks -📚books

Subscribe to a channel

Python/ django

Мечтаете не просто разбираться в управлении данными, а использовать уникальные инструменты для работы с Big Data? Научитесь этому на бесплатном студкемпе Яндекс Образования и ИТМО по дата-инженерии!

🧠 Программа — интенсивная, актуальная, от лидеров индустрии. С 30 июня по 12 июля вы погрузитесь в мир распределённых хранилищ, микросервисной архитектуры, DataOps/MLOps и пайплайнов для сбора, анализа и визуализации данных. А ещё познакомитесь с технологиями, которые используют в крупных компаниях. В общем, получите реальные навыки, которые ценят на рынке!

🏙 Кампус — в самом центре Санкт-Петербурга. Несмотря на то, что студкемп проходит на базе ИТМО, заявки ждут от студентов из любых вузов и регионов России. Проезд и проживание будут оплачены Яндекс Образованием, так что вам останется сосредоточиться на главном — знаниях, опыте и новых возможностях.

🕐 Регистрация — открыта до 4 мая, но подать заявку можно уже сейчас! Если давно хотели пообщаться с топовыми айтишниками и почувствовать, каково это — учиться в одном из ведущих технических вузов, не откладывайте и заполняйте анкету по ссылке.

Читать полностью…

Python/ django

🐍 Как просто создать мультисловарь (Multi-dictionary) в Python

Хочешь, чтобы один ключ в словаре указывал на несколько значений?

Легко!

Используй collections.defaultdict и встроенный list:


from collections import defaultdict

multidict = defaultdict(list)
multidict["SW"].append("Han Solo")
multidict["SW"].append("R2D2")


🔁 Теперь каждый ключ по умолчанию сопоставляется с пустым списком. А append добавляет новое значение в этот список.

Но будь внимателен: это немного “обман”. На самом деле словарь всё ещё отображает один ключ → одно значение. Просто это значение — список, в который ты уже сам кладёшь что угодно.

Почему defaultdict удобен?
Потому что тебе не нужно проверять, есть ли ключ в словаре. Пустой список будет создан автоматически при первом обращении к ключу.

@pythonl

Читать полностью…

Python/ django

🖥 less_slow.py — Python, который не тормозит

Многие считают Python медленным, но это не всегда правда.
Ash Vardanyan в рамках проекта Less Slow показывает, как писать быстрый и эффективный код даже на Python — без магии, но с пониманием.

🐍 Что в проекте:
🔹 pandas vs polars — что быстрее при работе с миллионами строк
🔹 Использование Numba, Cython, PyO3, rust bindings
🔹 Работа с нативными типами, векторизация и zero-copy
🔹 Сериализация без боли: сравнение MessagePack, Arrow, Parquet
🔹 Сравнение аллокаторов, подходов к I/O и нагрузочным тестам
🔹 Ускорение парсинга JSON: orjson, yyjson, simdjson, ujson
🔹 Как обойти GIL и не платить за удобство интерпретатора

📦 Библиотеки и техники:
▪Numba, Cython, cffi, maturin
▪simdjson, orjson, polars
▪pyarrow, msgspec, blosc2, memoryview
▪Работа с mmap, zero-copy, JIT-компиляция, py-spy, perf

📈 Кому подойдёт:
▪Тем, кто пишет ETL, пайплайны или ML/AI обработку

▪Кто работает с большими объёмами данных или бинарными файлами

▪Кто хочет “оптимизировать до безобразия” и понять, как работает Python под капотом

В серии есть еще 2 крутых проекта:

🖥 less_slow.cpp — C++ без тормозов: ассемблер, кеши, SIMD, аллокации, парсинг JSON и трюки с памятью
👉 github.com/ashvardanian/less_slow.cpp

👣 less_slow.rs — продвинутый Rust: сравнение async/sync, SIMD, кеш-френдли структуры, быстрые сериализации
👉 github.com/ashvardanian/less_slow.rs


📚 Репозиторий:

💡 Даже если ты не используешь всё это каждый день — ты точно станешь писать лучший Python-код.

@pythonl

Читать полностью…

Python/ django

🐍 7 “бесполезных” функций Python, которые на самом деле полезны

Инструменты из стандартной библиотеки, которые могут удивить:

1. textwrap.dedent() — удаляет отступы у многострочного текста.


import textwrap
text = textwrap.dedent(\"\"\"
Привет!
Это текст с отступами.
\"\"\").strip()
print(text)


2. difflib.get_close_matches() — находит похожие строки.

import difflib
words = ["python", "java", "javascript"]
print(difflib.get_close_matches("javascrip", words))


3. uuid.uuid4() — генерирует уникальный ID.

import uuid
print(uuid.uuid4())


4. shutil.get_terminal_size() — узнаёт размеры терминала.

import shutil
columns, rows = shutil.get_terminal_size()
print(f"Размер терминала: {columns}x{rows}")


5. functools.lru_cache() — кэширует результаты функции.

from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) fib(n-2)
print(fib(100))


6. itertools.groupby() — группирует элементы по ключу.

from itertools import groupby
data = [('fruit', 'apple'), ('fruit', 'banana'), ('veg', 'carrot')]
for key, group in groupby(data, lambda x: x[0]):
print(key, list(group))


7. contextlib.suppress() — элегантная альтернатива try-except.

from contextlib import suppress
with suppress(FileNotFoundError):
open("not_exist.txt")


@pythonl

Читать полностью…

Python/ django

⚡️Строим рекомендательную систему фильмов на Kaggle

Вы когда-нибудь хотели сделать свою собственную систему рекомендаций фильмов? 🎬

Приходите на бесплатный вебинар, где Савелий Батурин, Senior ML-Engineer и преподаватель курса по ML школы Simulative в прямом эфире покажет как построить рекомендательную систему фильмов на Kaggle.

Что будем делать на вебинаре:
🟠Разберем имеющиеся данные фильмов с их оценками
🟠Проведем предобработку данных
🟠Построим рекомендательную систему на основе машинного обучения
🟠Проведем расчет и анализ метрик на основе результатов работы модели

Вебинар будет интересен как новичкам, так и уже опытным специалистам

😶Зарегистрироваться на бесплатный вебинар

Читать полностью…

Python/ django

👩‍💻 Docker — лучший канал для ускоренного обучения DevOps.

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

Прокачать скиллы: t.me/DevopsDocker

Читать полностью…

Python/ django

Поздравляем, вы на 1 шаг ближе к работе мечты 🥳

Осталось только прочитать этот пост, подписаться на канал и откликнуться на вакансию 😉

Avito Career — место, где Авито делится актуальными вакансиями и стажировками для Python-разработчиков.

Подписывайтесь, чтобы найти ту самую работу ✨

Читать полностью…

Python/ django

📌 Tracecat — open-source платформа для автоматизации безопасности. Этот проект предлагает YAML-шаблоны для создания workflow с визуальным редактором, упрощая автоматизацию рутинных задач.

Инструмент позволяет интегрировать Temporal для надёжного выполнения сценариев и поддержка MITRE D3FEND. Локальный запуск возможен через Docker Compose, а для продакшена есть Terraform-конфиги для AWS Fargate.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🖥 Важная особенность генераторов в Python!

Давай разберемся, как это работает:

Что такое Генератор?
Функция my_generator_function является генератором, потому что она использует ключевое слово yield.

В отличие от обычной функции, которая выполняет весь код и возвращает одно значение через return, генератор "приостанавливается" на каждом yield, возвращая указанное значение.

При следующем вызове он возобновляет работу с того места, где остановился.
Как работает yield:
Когда вы вызываете gen = my_generator_function(), код внутри функции не выполняется.

Создается специальный объект-генератор (gen).
Первый вызов next(gen) заставляет функцию выполниться до первого yield 1. Функция возвращает 1 и приостанавливается.
Второй вызов next(gen) возобновляет выполнение с точки после yield 1 и доходит до yield 2. Функция возвращает 2 и снова приостанавливается.
Именно поэтому print(next(gen), next(gen)) выводит 1 2.

Как работает return в генераторе:
Когда поток выполнения внутри генератора доходит до оператора return (в нашем случае return 73) или просто до конца функции без явного return, генератор считается завершенным.

Важно: Значение, указанное в return (здесь 73), не возвращается как обычное значение через yield. Вместо этого генератор выбрасывает (raises) специальное исключение: StopIteration.

Этот механизм StopIteration - стандартный способ в Python сигнализировать, что итератор (а генератор - это тип итератора) исчерпан.

Перехват StopIteration и получение значения:
В правой части кода мы пытаемся вызвать next(gen) еще раз.

Генератор возобновляется после yield 2, доходит до return 73 и выбрасывает StopIteration.

Конструкция try...except StopIteration as err: перехватывает это исключение.

Ключевой момент (показан стрелкой на картинке): Значение, которое было указано в операторе return генератора (73), становится доступным как атрибут .value пойманного исключения StopIteration.

Поэтому print(err.value) выводит # 73.

Итог:
Teturn в генераторе не производит очередное значение, а завершает его работу. При этом значение из return "упаковывается" в исключение StopIteration, сигнализирующее об окончании, и его можно извлечь из атрибута .value этого исключения, если перехватить его вручную.

Стандартный цикл for item in generator(): в Python автоматически обрабатывает StopIteration (просто завершает цикл) и не дает прямого доступа к err.value. Поэтому для демонстрации этого механизма и получения возвращаемого значения используется явный вызов next() внутри блока try...except.

@pythonl

Читать полностью…

Python/ django

🧠 Влияет ли кэш CPU на производительность Python-кода?

Лукас Аткинсон провёл серию тестов, чтобы проверить, как поведение CPU-кэша влияет на время выполнения Python-кода. Результаты удивляют.

🔍 Ключевые выводы:

- Последовательный доступ к спискам быстрее, чем случайный
- При 200k элементах случайный доступ медленнее на 47%
- При 1.6M элементов — почти в 4 раза
- Python чувствителен к низкоуровневым аспектам памяти, в том числе CPU-кэшу

💡 Совет: при работе с большими объёмами данных используй последовательный доступ — это реально ускоряет код.

📖 Читать подробнее: lukasatkinson.de

@pythonl

Читать полностью…

Python/ django

🖥 Строковый метод translate позволяет заменять (или удалять) несколько символов строки за один проход. (Похоже на множественные вызовы метода replace.)

import string

s = "Hello, world!"
print(s.translate(str.maketrans("", "", string.punctuation)))
# Hello world


Строковый метод translate ожидает «таблицу перевода», которую мы создаем с помощью вспомогательного метода класса maketrans.

Третий аргумент (string.punctuation в примере) — это строка символов, которые мы хотим удалить.

Значение string.punctuation
(на которое указывает стрелка):
!'#$%&\'()*+,-./:;<=>?@[\\]^_{|}~`

Суть шпаргалки: Она показывает, как эффективно удалить все стандартные знаки препинания из строки в Python, используя комбинацию методов str.maketrans для создания "инструкции" по удалению и str.translate для применения этой инструкции к строке.

@pythonl

Читать полностью…

Python/ django

🐍 Задача по Python: Замыкания и области видимости

Что выведет следующий код?


def outer():
x = 5
def inner():
nonlocal x
x += 1
return x
return inner

f = outer()
print(f())
print(f())
print(f())


Варианты ответа:
A)

7
8


B)

5
5


C)

6
6


D) Ошибка выполнения

---

✅ Правильный ответ: A

Почему:
Функция
outer создаёт замыкание. Переменная x сохраняется между вызовами f, потому что inner — замыкает x и изменяет её с помощью nonlocal. Это классический пример использования замыканий в Python.

@pythonl

Читать полностью…

Python/ django

🚀 Автоматизируй Docker для Python за 1 команду с Python

📦 Dockerpyze — мощный опенсорс-инструмент, который превращает любой Python-проект на uv или poetry в Docker-образ без ручной возни.

💡 Просто добавь - [tool.dpy] в pyproject.toml, укажи entrypoint — и собирай образы одной командой. Без Dockerfile, без боли.

🔧 Поддерживает:
✅ PEP-621
✅ uv и poetry
✅ кастомные переменные, порты и зависимости
✅ CI/CD (в т.ч. GitHub Actions)

🔥 Подходит для быстрой упаковки ML-сервисов, REST API, CLI-инструментов и всего, что крутится на Python.

Github

#python #docker #poetry #uv #devtools #opensource #cli

@pythonl

Читать полностью…

Python/ django

🚀 Летняя школа бэкенда Яндекса открыла набор!

Хочешь провести лето с пользой, развивая реальные сервисы в команде с профи? Это твой шанс!

Если ты:
• Уверенно пишешь на Python, Java или C++
• Понимаешь основы алгоритмов и структур данных
— подавай заявку в Летнюю школу бэкенд‑разработки Яндекса.

🗓 Формат обучения:
• 2 июня – 27 июля — онлайн-лекции и практика
• 28 июля – 24 августа — работа над проектами (онлайн или офлайн)

💡 Что тебя ждёт:
• Реальные задачи и работа в фулстек-команде
• Наставничество от инженеров Яндекса
• Возможность получить офер: >50% выпускников становятся стажёрами или сотрудниками компании
• Нетворкинг, лекторий и крутая атмосфера

📍Участие бесплатное.
🕓 Заявки принимаются до 27 апреля. Не упусти!

🔗 Подробнее

#backend #летняяшкола #яндекс #стажировка #разработка #python #java #cplusplus

Читать полностью…

Python/ django

⚡️Поступили новости от Kaspersky!

В «Лаборатории Касперского» стартовал набор на оплачиваемую стажировку SafeBoard по нескольким направлениям тестирования! Если ты студент вуза Москвы/МО или учишься в Школе 21 и готов(а) работать от 20 часов в неделю, присоединяйся к нашим IT-командам.

Ты научишься интересным задачам:

Разрабатывать подходы и методики тестирования;
Анализировать требования и проектную документацию;
Участвовать в развитии тестового фреймворка на Python;
Поддерживать CI/CD;
Расширять тестовое покрытие для KasperskyOS.

Тебя ждет зарплата, компенсация питания и крутая атмосфера в офисе: спортзал, сауна, игровые комнаты, кофейные паузы и многое другое 😇

Делай крутые тесты, регистрируйся https://kas.pr/bn12?erid=2W5zFJhkKRr

Реклама. Рекламодатель АО «Лаборатория Касперского» ИНН 7713140469

Читать полностью…

Python/ django

🔥 Smolmodels — это библиотека на Python, которая позволяет создавать модели машинного обучения, описывая их поведение на естественном языке и используя минимальное количество кода!

🔍 Основные возможности Smolmodels:

🌟 Определение моделей с помощью естественного языка: Пользователь описывает намерение модели и её входные и выходные схемы на обычном языке, а библиотека автоматически выбирает метрику для оптимизации и генерирует логику для инженерии признаков, обучения модели и её оценки.

🌟 Построение модели: Метод model.build() принимает набор данных (существующий или сгенерированный) и создаёт множество возможных решений модели, обучая и оценивая их для выбора наилучшего.

🌟 Генерация данных и определение схемы: Библиотека может генерировать синтетические данные для обучения и тестирования, что полезно при отсутствии реальных данных или для дополнения существующих.

🔐 Лицензия: Apache-2.0

🖥 Github

@pythonl

Читать полностью…

Python/ django

🔥 TeleGraphite — быстрый и надёжный скрапер публичных Telegram-каналов на Python.

Возможности:
- Извлечение постов из нескольких каналов в JSON (ID, текст, время, ссылки, почты, телефоны)
- Загрузка медиа (фото, видео, документы)
- Удаление дубликатов
- Однократный режим (telegraphite once) и непрерывный (telegraphite continuous --interval)
- Фильтрация по ключевым словам, типу контента (текст/медиа)
- Планирование запусков по расписанию
- Настройка через CLI и YAML

Установка:
1) pip install telegraphite
2) Создать .env с API_ID и API_HASH
3) Список каналов в channels.txt

Репозиторий
: https://github.com/hamodywe/telegram-scraper-TeleGraphite

@pythonl

Читать полностью…

Python/ django

😂 Жиза

@pythonl

Читать полностью…

Python/ django

🔍 Основные нововведения в Django 5.2

1. 📦 Автоматический импорт моделей в интерактивной оболочке
Теперь при запуске команды python manage.py shell все модели из установленных приложений автоматически импортируются.

Это упрощает работу в интерактивной оболочке, позволяя сразу использовать модели без необходимости ручного импорта. Для получения подробностей об импортированных объектах можно использовать флаг -v 2.​

2. 🔗 Поддержка составных первичных ключей
Django 5.2 вводит нативную поддержку составных первичных ключей через класс CompositePrimaryKey. Это позволяет создавать таблицы с первичным ключом, состоящим из нескольких полей, без необходимости использования сторонних решений.​

3. 🧩 Гибкая настройка BoundField в формах
Теперь можно переопределять класс BoundField на уровне проекта, формы или отдельного поля, устанавливая атрибут bound_field_class. Это предоставляет разработчикам более тонкий контроль над отображением и поведением форм.​


4. ⚡ Расширенная асинхронная поддержка
Django продолжает движение в сторону асинхронности, добавляя новые асинхронные методы и улучшая реализацию бэкендов аутентификации. Это особенно полезно для операций, связанных с вводом-выводом, и способствует созданию более производительных приложений.​

5. 🎨 Новые виджеты форм и улучшения интерфейса
Добавлены новые виджеты форм, такие как ColorInput, SearchInput и TelInput, соответствующие стандартам HTML5. Также улучшена доступность форм для пользователей с особыми потребностями.​
Bastaki Software Solutions L.L.C-FZ

6. 🗃️ Улучшения в работе с базой данных

Поддержка изогнутых геометрий в GDAL, включая CurvePolygon, CompoundCurve, CircularString, MultiSurface и MultiCurve.

По умолчанию соединения с MySQL используют кодировку utf8mb4 вместо устаревшей utf8mb3.

Улучшена работа методов values() и values_list(), теперь они генерируют SELECT-запросы в указанном порядке.​

🔧 Совместимость и поддержка
Django 5.2 поддерживает Python версий 3.10–3.13.

С выходом этой версии, основная поддержка Django 5.1 завершена. Последний минорный релиз 5.1.8, также содержащий обновления безопасности, был выпущен одновременно с 5.2.

Django 5.0 достиг конца расширенной поддержки. Последний релиз безопасности, 5.0.14, также был выпущен сегодня. Рекомендуется обновиться до версии 5.1 или более новой.

📥 Обновление и ресурсы
Загрузить Django 5.2 можно с официальной страницы загрузки или через PyPI.

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

Для автоматического обновления кода и устранения устаревших конструкций можно использовать инструмент django-upgrade.​
Django Project

Django 5.2 предлагает множество улучшений, направленных на упрощение разработки и повышение производительности приложений. Рекомендуется ознакомиться с новыми возможностями и планировать обновление своих проектов для использования всех преимуществ этой версии.

📌 Релиз

@pythonl

Читать полностью…

Python/ django

🚀 Python-разработчик — от основ до синьора.

Если вы ищете структурированный roadmap в бэкенд-разработке на Python, обратите внимание на дорожную карту от Boot.dev. Она начинается с базовых навыков (Linux, Git, ООП) и ведёт к сложным темам: алгоритмы, HTTP-серверы, безопасность и DevOps-инструменты.

Создатели сделали акцент на практике. После каждого теоретического блока предлагается создать проект: от простого бота до агрегатора блогов с использованием SQL и облачных хранилищ.

🤖 GitHub

@python_job_interview

Читать полностью…

Python/ django

🐍 Dulwich — проект, предлагающий альтернативу классическим библиотекам вроде GitPython и pygit2. Это полностью Python-реализация Git-клиента без зависимостей от нативного Git.

Инструмент поддерживает как низкоуровневые операции с репозиториями, так и сложные команды, имитирующие интерфейс командной строки Git. Для тех, кому важна производительность, есть опциональные Rust-расширения.

🤖 GitHub

@pythonl

Читать полностью…

Python/ django

🖥 Python на скорости Rust

Новый Function (fxn) — фреймворк, который компилирует Python-функции в нативный код с производительностью, сравнимой с Rust.

🧠 Как это работает?
- Использует символическое трассирование на CPython для анализа функций
- Генерирует промежуточное представление (IR)
- Транслирует IR в C++ или Rust, а затем компилирует в бинарный код
- Поддерживает платформы: Linux, Android, WebAssembly и др.

📦 Пример:
@compile
def fma(x: float, y: float, z: float) -> float:
return x * y + z
После компиляции вы получаете нативный бинарник, который можно запускать без интерпретатора Python.

🔗 Подробнее
🔗 Github

@pythonl

#Python #Rust #fxn #Compiler #Performance #AI #ML #Wasm

Читать полностью…

Python/ django

🌟 TARIFF — инструмент, который вы реально ждали, Python-пакет, который делает импорты «Великими» снова.

Инструмент позволяет вводить "пошлины" на Python-библиотеки, замедляя загрузку определённых пакетов, чтобы подчеркнуть идею "экономического протекционизма" в коде.​

✔️ Основные особенности
Имитация тарифов на импорты: пользователь может установить "тарифы" (в процентах) на определённые пакеты, например:​



import tariff

tariff.set({
"numpy": 50, # 50% тариф на numpy
"pandas": 200, # 200% тариф на pandas
"requests": 150 # 150% тариф на requests
})


Замедление импорта: при импорте указанных пакетов время загрузки увеличивается пропорционально установленному тарифу.​

Вывод сообщений: при каждом "обложенном тарифом" импорте выводится сообщение в стиле политической риторики, например:​

JUST IMPOSED a 50% TARIFF on numpy! Original import took 45000 us, now takes 67500 us. American packages are WINNING AGAIN! #MIPA

Библиотека использует monkey-patching для перехвата и модификации процесса импорта.​

Github

@ai_machinelearning_big_data

#fun #python

Читать полностью…

Python/ django

Стартовал набор в ШАД — успейте подать заявку!

Технологии меняют нашу реальность, но за их развитием стоят люди, которые умеют находить нестандартные решения. И именно в Школе анализа данных Яндекса готовят таких специалистов! Здесь амбициозные и увлечённые студенты:

- погружаются в машинное обучение, Data Science и искусственный интеллект;
- перенимают опыт экспертов из индустрии;
- учатся решать задачи, стоящие перед ведущими IT-компаниями и исследовательскими центрами.

Учёба в ШАДе — это серьёзный вызов даже для тех, кто уже знаком с анализом данных. Поступить непросто, но если вы готовы к интенсивной нагрузке, нестандартным кейсам и полной пересборке своего мышления — это место для вас! За 2 года обучения вы получите инструменты и навыки, которые позволят работать над сложнейшими задачами индустрии, запускать собственные проекты и двигать науку вперёд.

Занятия полностью бесплатны и проходят по вечерам. Если в вашем городе нет филиала, можно учиться онлайн. Готовы бросить вызов данности? Тогда подавайте заявку до 4 мая!

Читать полностью…

Python/ django

Аналитиков данных становится все больше, а вы до сих пор не понимаете, что это за специалисты, и чем они занимаются?

Онлайн-школа Data Science karpovꓸcourses приглашает на бесплатный вебинар, где вы не только узнаете все о востребованной профессии, но еще и поймете, подходит ли вам эта сфера, и как начать развиваться в ней!

Старт: 15 апреля в 19:00 мск.

Спикер вебинара — преподаватель karpovꓸcourses и Team lead команды продуктовой аналитики в Raiffeisen CIB — расскажет о том, какие навыки нужны для старта карьеры, и с какими задачами работают аналитики каждый день.

А в конце вебинара вас ждет бонус от школы karpovꓸcourses — карьерный гайд и промокод на скидку на обучение.

Регистрируйтесь, чтобы не упустить возможность узнать больше о профессии аналитика данных и сделать шаг к новой карьере →
https://clck.ru/3L4Y8K/?erid=2VtzqwmamE1

Реклама. ООО «Карпов Курсы», ИНН: 7811764627, erid: 2VtzqwmamE1

Читать полностью…

Python/ django

🌟 NVIDIA добавила нативную поддержку Python в CUDA.

Python уже несколько лет уверенно лидирует среди языков программирования, а теперь стал ещё ближе к железу. На GTC 2025 NVIDIA объявила о полноценной интеграции Python в свой CUDA-стек.

Это значит, что писать код для GPU можно будет напрямую на Python — без погружения в C++ или Fortran. Как подчеркнул Стивен Джонс, архитектор CUDA, цель — сделать инструмент естественным для Python-разработчиков: «Это не перевод синтаксиса C на Python. Все должно работать так, как привыкли разработчики».

Раньше CUDA требовала глубокого понимания низкоуровневых языков и это здорово ограничивало аудиторию. Сейчас, когда Python стал стандартом в ML и DS, NVIDIA открывает двери для миллионов программистов. По данным The Futurum Group, в 2023 году CUDA использовали 4 миллиона человек — теперь их число может резко вырасти.

Техническая часть такая же обширная, как и ожидания этого события профессиональным сообществом.

🟢Во-первых, появилась библиотека cuPyNumeric — аналог NumPy, который переносит вычисления с CPU на GPU буквально заменой импорта.

🟢Во-вторых, CUDA Core переосмыслен для Python: здесь сделан упор на JIT-компиляцию и минимизацию зависимостей.

🟢В-третьих, добавлены инструменты для профилирования и анализа кода, а ускоренные C++-библиотеки теперь доступны из Python без потерь в производительности.

Но главное — новый подход к параллельным вычислениям. Вместо ручного управления потоками, как в C++, NVIDIA предлагает модель CuTile, которая оперирует массивами, а не отдельными элементами. Это упрощает отладку и делает код читаемым, не жертвуя скоростью. По сути, разработчики получают высокоуровневую абстракцию, скрывающую сложности железа, но сохраняющую гибкость.

Пока CuTile доступен только для Python, но в планах — расширение для C++. Это часть стратегии NVIDIA по поддержке новых языков: Rust и Julia уже на походе.

Python-сообщество уже может экспериментировать — например, интегрировать CUDA-ядра в PyTorch или вызывать привычные библиотеки. Теперь даже те, кто никогда не писал на C++, смогут использовать всю мощь GPU — осталось проверить, как это скажется на скорости создания прекрасных LLM светлого будущего.

🔜 Посмотреть полную презентацию на GTC 2025


@ai_machinelearning_big_data

#AI #ML #Python #CUDA #NVIDIA

Читать полностью…

Python/ django

🧠 Python-задача на внимательность и знание подводных камней

Что выведет этот код?


def make_funcs():
funcs = []
for i in range(3):
def wrapper(x=i):
return lambda: x
funcs.append(wrapper())
return funcs

a, b, c = make_funcs()
print(a(), b(), c())


❓ Варианты ответа:

A)0 1 2
В) 2 2 2
C)0 0 0
D)Ошибка на этапе выполнения

✅ Ответ: 0 1 2

📘 Объяснение:
🔹 Цикл for i in range(3) проходит по значениям 0, 1, 2.

🔹 В каждой итерации вызывается wrapper(x=i) — это копирует текущее значение i в локальную переменную x.

🔹 Затем возвращается lambda: x, которая запоминает это конкретное значение x.

🔹 В итоге:

a() → 0

b() → 1

c() → 2

Если бы мы не использовали x=i по умолчанию, а писали просто lambda: i, все функции замкнули бы одну и ту же переменную i, и на момент вызова она бы уже была равна 3.


@pythonl

Читать полностью…

Python/ django

🚀 Как Duolingo ускорил микросервисы на 40% с помощью асинхронного Python 🐍⚡

Duolingo рассказали, как им удалось значительно повысить производительность своих Python-сервисов, переведя их на async/await, и сделали это не ради хайпа, а ради экономии.

💸 Мотивация: производительность и снижение затрат
Duolingo работает с большим количеством микросервисов, обрабатывающих огромные объёмы трафика. Несмотря на высокую нагрузку, многие их Python-сервисы простаивали в ожидании I/O — например, сетевых запросов или операций с базой данных. Это означало неэффективное использование CPU, а значит — деньги на облачный хостинг тратились зря.

Асинхронный код — способ “переключаться” между задачами во время ожидания, используя CPU с большей отдачей. Именно это стало главной мотивацией: не “просто быть async”, а снизить расходы.

⚙️ Как проходила миграция
Процесс был постепенным и продуманным. Ниже ключевые шаги:

▪ Переход не “всё или ничего”
Команда не бросалась переписывать весь сервис с нуля. Они начали с конвертации отдельных маршрутов (routes) на async def, добавляя поддержку асинхронности по частям.

▪ Инструменты постепенно адаптировали
Библиотеки и инструменты внутри компании пришлось обновить:
 ▪ свой HTTP-клиент переписали под aiohttp,
 ▪ систему аутентификации сделали совместимой с async-контекстами,
 ▪ логирование, трассировка и метрики обновили под async-архитектуру.

▪ Тесты и инфраструктура
Асинхронные изменения требовали пересмотра тестов. Они внедрили поддержку pytest-asyncio и переосмыслили подход к мокам и фикстурам.

▪ Запуск в проде — поэтапно
Сначала маршруты работали в синхронном режиме. Потом их перевели в async-режим и замерили разницу. Так удалось отловить “узкие места” до массового внедрения.

📈 Результаты: +40% производительности на инстанс
▪ У каждого экземпляра микросервиса CPU начал использоваться эффективнее.
▪ Снизилось среднее время ответа (latency).
▪ Уменьшилось количество необходимых инстансов — экономия в $$$.
▪ Код стал удобнее масштабировать и поддерживать в I/O-интенсивной среде.

Пока один запрос “ждёт”, процессор может выполнять другие задачи.

🔍 Выводы
Duolingo подчёркивает:
асинхронность не нужна “просто потому что модно”.
Но если у вас сервис с большим числом I/O-операций и важна производительность — async Python может дать реальный прирост и экономию.

➡ Оригинальный пост

@pythonl

Читать полностью…

Python/ django

🖥 Разработка игры в стиле Mario с нуля на Python

Создание собственной игры в духе легендарного Super Mario Bros — это отличный способ прокачать навыки программирования, погрузиться в основы геймдева и просто повеселиться.

Гайд по разработке простой платформенной игры с нуля Python, используя библиотеку Pygame.

📌 Гайд

@pythonl

Читать полностью…

Python/ django

🔌 python-kasaуправление умными устройствами TP-Link из Python.

Если у вас есть умные розетки, лампы или другие устройства TP-Link и вы хотели бы автоматизировать их через Python, обратите внимание на эту библиотеку. С её помощью можно легко включать/выключать устройства, проверять их статус и даже управлять через командную строку. Поддерживаются как модели Kasa, так и Tapo, включая розетки, выключатели, лампы и даже камеры.

🤖 GitHub

@pythonl

Читать полностью…
Subscribe to a channel