⚡️ Как Redis считает миллиарды уникальных значений, почти не тратя память
Есть алгоритм HyperLogLog. Он позволяет примерно понять, сколько уникальных элементов прошло через систему, используя около 12 KB памяти.
Идея простая: Redis не хранит сами элементы.
Он делает так:
- берёт элемент
- считает от него хеш
- часть хеша использует как номер ячейки
- в другой части смотрит, сколько нулей подряд встретилось
- если новое число больше старого - обновляет ячейку
Почему это работает?
Потому что длинная серия нулей в хеше встречается редко.
Например:
- 1 ноль подряд - довольно часто
- 5 нулей подряд - уже реже
- 10 нулей подряд - примерно шанс 1 к 1024
- 20 нулей подряд - совсем редкое событие
Если Redis увидел очень редкий паттерн, значит через него, скорее всего, прошло много разных элементов.
В Redis используется 16 384 маленьких счётчика. Каждый хранит максимальную «редкость», которую видел для своей группы элементов.
Потом Redis объединяет эти значения математикой и получает оценку уникальных элементов.
Не точное число, а очень близкую оценку.
Главный прикол HyperLogLog:
он может обработать хоть миллионы, хоть миллиарды значений, но память почти не растёт.
Именно поэтому Redis умеет считать уникальных пользователей, IP, запросы или события без огромных таблиц и списков.
@Python_Community_ru
Есть алгоритм HyperLogLog. Он позволяет примерно понять, сколько уникальных элементов прошло через систему, используя около 12 KB памяти.
Идея простая: Redis не хранит сами элементы.
Он делает так:
- берёт элемент
- считает от него хеш
- часть хеша использует как номер ячейки
- в другой части смотрит, сколько нулей подряд встретилось
- если новое число больше старого - обновляет ячейку
Почему это работает?
Потому что длинная серия нулей в хеше встречается редко.
Например:
- 1 ноль подряд - довольно часто
- 5 нулей подряд - уже реже
- 10 нулей подряд - примерно шанс 1 к 1024
- 20 нулей подряд - совсем редкое событие
Если Redis увидел очень редкий паттерн, значит через него, скорее всего, прошло много разных элементов.
В Redis используется 16 384 маленьких счётчика. Каждый хранит максимальную «редкость», которую видел для своей группы элементов.
Потом Redis объединяет эти значения математикой и получает оценку уникальных элементов.
Не точное число, а очень близкую оценку.
Главный прикол HyperLogLog:
он может обработать хоть миллионы, хоть миллиарды значений, но память почти не растёт.
Именно поэтому Redis умеет считать уникальных пользователей, IP, запросы или события без огромных таблиц и списков.
@Python_Community_ru
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Python умеет читать бинарные файлы блоками очень элегантно - без ручного while True.
Вот такой приём через functools.partial:
`iter(partial(f.read, 64), b'')`
Что тут происходит:
partial(f.read, 64) превращает f.read(64) в функцию без аргументов.
iter(..., b'') вызывает её снова и снова, пока результат не станет b'', то есть пока файл не закончится.
В итоге получаем аккуратный цикл по блокам:
from functools import partial
with open("mydata.db", "rb") as f:
for block in iter(partial(f.read, 64), b""):
process_block(block)
@Python_Community_ru
Вот такой приём через functools.partial:
`iter(partial(f.read, 64), b'')`
Что тут происходит:
partial(f.read, 64) превращает f.read(64) в функцию без аргументов.
iter(..., b'') вызывает её снова и снова, пока результат не станет b'', то есть пока файл не закончится.
В итоге получаем аккуратный цикл по блокам:
from functools import partial
with open("mydata.db", "rb") as f:
for block in iter(partial(f.read, 64), b""):
process_block(block)
@Python_Community_ru
👍2
🖥 В России второй день подряд жалуются на проблемы с доступом к PyPI, главному репозиторию пакетов для Python. По данным Downdetector, сбои затрагивают пользователей из разных регионов.
PyPI для Python-разработчиков - это не просто сайт с библиотеками. Через него ставятся зависимости, фреймворки, CLI-утилиты и большая часть всего, что нужно для нормальной разработки. Когда он начинает отваливаться, ломается не «ещё один зарубежный сервис», а базовая инфраструктура языка.
Диагностика интернет-блокировок показала обрыв соединения на этапе TLS. Это момент, когда клиент и сервер пытаются установить защищённое соединение. Такое поведение похоже на блокировки через DPI, то есть глубокую инспекцию пакетов.
По симптомам ситуация напоминает недавние проблемы с доступом к DeepSeek, которые издание тоже связывало с похожим механизмом.
При этом в Роскомнадзоре утверждают, что PyPI не ограничивали и проблем с доступом к ресурсу не фиксируют, сообщает «Осторожно, новости».
Для разработчиков это неприятный сигнал. Даже если проблема окажется временным сбоем, зависимость от внешней инфраструктуры снова стала очень заметной: без PyPI внезапно сложнее собрать проект, поднять окружение, поставить зависимости и просто нормально работать с Python.
@Python_Community_ru
PyPI для Python-разработчиков - это не просто сайт с библиотеками. Через него ставятся зависимости, фреймворки, CLI-утилиты и большая часть всего, что нужно для нормальной разработки. Когда он начинает отваливаться, ломается не «ещё один зарубежный сервис», а базовая инфраструктура языка.
Диагностика интернет-блокировок показала обрыв соединения на этапе TLS. Это момент, когда клиент и сервер пытаются установить защищённое соединение. Такое поведение похоже на блокировки через DPI, то есть глубокую инспекцию пакетов.
По симптомам ситуация напоминает недавние проблемы с доступом к DeepSeek, которые издание тоже связывало с похожим механизмом.
При этом в Роскомнадзоре утверждают, что PyPI не ограничивали и проблем с доступом к ресурсу не фиксируют, сообщает «Осторожно, новости».
Для разработчиков это неприятный сигнал. Даже если проблема окажется временным сбоем, зависимость от внешней инфраструктуры снова стала очень заметной: без PyPI внезапно сложнее собрать проект, поднять окружение, поставить зависимости и просто нормально работать с Python.
@Python_Community_ru
🔥1🤔1
🖥 Python не медленный. Медленным его часто делает ваш код.
У Python есть странная репутация: стоит программе начать тормозить, виноват сразу язык. Но в реальности большая часть быстрых сценариев в Python работает не потому, что интерпретатор внезапно стал магическим, а потому что тяжёлая работа уходит ниже - в C, C++ или Rust.
CPython написан на C. Многие встроенные операции тоже выполняются в C:
- len()
- list.append()
- dict.get()
- sum()
- сортировка
- операции со строками
- часть работы со списками и словарями
Когда вы вызываете list.append(), Python не крутит всю логику добавления элемента на уровне байткода. Он платит небольшой overhead за вызов, а дальше попадает в C-функцию внутри CPython.
Медленный путь начинается там, где мы вручную гоняем данные по одному элементу:
total = 0
for x in data:
total += x
На каждой итерации интерпретатор должен выполнить байткод, достать объект, проверить типы, сделать операцию, обновить значение и перейти к следующему элементу. Для маленьких списков это незаметно. Для миллионов элементов это уже цена, которую вы платите за каждую итерацию.
Быстрый путь выглядит иначе:
total = sum(data)
Здесь цикл проталкивается внутрь реализации. Python остаётся удобной оболочкой, а основная работа выполняется ближе к нативному коду.
С NumPy та же идея, только ещё жёстче:
total = np.sum(data)
Внутренний цикл почти не возвращается в Python. Массив обрабатывается внутри оптимизированного нативного кода, а обратно приходит уже готовый результат.
Поэтому фраза «Python медленный» слишком грубая.
Точнее так:
Python-циклы дорогие
C-циклы дешёвые
built-in функции часто быстрее ручного кода
NumPy быстрый не из-за синтаксиса, а потому что не гоняет каждый элемент через интерпретатор
хороший Python-код старается как можно дольше оставаться внутри готовых операций и библиотек
Оптимизация Python часто начинается не с переписывания проекта на Go или Rust, а с простого вопроса:
можно ли убрать ручной цикл и отдать работу тому коду, который уже написан на C, C++ или Rust?
Python хорош не как самый быстрый исполнитель каждой операции.
Он хорош как удобный слой управления над быстрыми нативными кусками.
@Python_Community_ru
У Python есть странная репутация: стоит программе начать тормозить, виноват сразу язык. Но в реальности большая часть быстрых сценариев в Python работает не потому, что интерпретатор внезапно стал магическим, а потому что тяжёлая работа уходит ниже - в C, C++ или Rust.
CPython написан на C. Многие встроенные операции тоже выполняются в C:
- len()
- list.append()
- dict.get()
- sum()
- сортировка
- операции со строками
- часть работы со списками и словарями
Когда вы вызываете list.append(), Python не крутит всю логику добавления элемента на уровне байткода. Он платит небольшой overhead за вызов, а дальше попадает в C-функцию внутри CPython.
Медленный путь начинается там, где мы вручную гоняем данные по одному элементу:
total = 0
for x in data:
total += x
На каждой итерации интерпретатор должен выполнить байткод, достать объект, проверить типы, сделать операцию, обновить значение и перейти к следующему элементу. Для маленьких списков это незаметно. Для миллионов элементов это уже цена, которую вы платите за каждую итерацию.
Быстрый путь выглядит иначе:
total = sum(data)
Здесь цикл проталкивается внутрь реализации. Python остаётся удобной оболочкой, а основная работа выполняется ближе к нативному коду.
С NumPy та же идея, только ещё жёстче:
total = np.sum(data)
Внутренний цикл почти не возвращается в Python. Массив обрабатывается внутри оптимизированного нативного кода, а обратно приходит уже готовый результат.
Поэтому фраза «Python медленный» слишком грубая.
Точнее так:
Python-циклы дорогие
C-циклы дешёвые
built-in функции часто быстрее ручного кода
NumPy быстрый не из-за синтаксиса, а потому что не гоняет каждый элемент через интерпретатор
хороший Python-код старается как можно дольше оставаться внутри готовых операций и библиотек
Оптимизация Python часто начинается не с переписывания проекта на Go или Rust, а с простого вопроса:
можно ли убрать ручной цикл и отдать работу тому коду, который уже написан на C, C++ или Rust?
Python хорош не как самый быстрый исполнитель каждой операции.
Он хорош как удобный слой управления над быстрыми нативными кусками.
@Python_Community_ru
✔️ Centaur - это платформа для совместного использования AI-агентов, интегрированных в Slack.
Она позволяет командам взаимодействовать с агентами, которые выполняют задачи в изолированных средах Kubernetes, обеспечивая безопасность и гибкость.
🚀 Основные моменты:
- Slack-агенты для выполнения задач и получения ответов.
- Изолированные среды для безопасного выполнения команд.
- Поддержка пользовательских инструментов и плагинов.
- Долговременные рабочие процессы с возможностью восстановления.
- Хранение состояния для повторного подключения без потери данных.
📌 GitHub: https://github.com/paradigmxyz/centaur
#python
@Python_Community_ru
Она позволяет командам взаимодействовать с агентами, которые выполняют задачи в изолированных средах Kubernetes, обеспечивая безопасность и гибкость.
🚀 Основные моменты:
- Slack-агенты для выполнения задач и получения ответов.
- Изолированные среды для безопасного выполнения команд.
- Поддержка пользовательских инструментов и плагинов.
- Долговременные рабочие процессы с возможностью восстановления.
- Хранение состояния для повторного подключения без потери данных.
📌 GitHub: https://github.com/paradigmxyz/centaur
#python
@Python_Community_ru
GitHub
GitHub - paradigmxyz/centaur: Multiplayer, self-hosted, secure agents.
Multiplayer, self-hosted, secure agents. Contribute to paradigmxyz/centaur development by creating an account on GitHub.
🚀 GPU-библиотека для классического машинного обучения
FlashLib предлагает высокопроизводительные реализации операторов машинного обучения, таких как kmeans, PCA и DBSCAN, с использованием Triton и CuteDSL. Библиотека позволяет эффективно обрабатывать данные на GPU, обеспечивая простоту использования и высокую скорость выполнения.
🚀Основные моменты:
- Поддержка 15 высокоуровневых примитивов для машинного обучения.
- Информативный API для оценки производительности операций.
- Оптимизированные реализации для кластеризации, регрессии и декомпозиции.
- Легкая интеграция с PyTorch и sklearn.
📌 GitHub: https://github.com/FlashML-org/flashlib
#python
@Python_Community_ru
FlashLib предлагает высокопроизводительные реализации операторов машинного обучения, таких как kmeans, PCA и DBSCAN, с использованием Triton и CuteDSL. Библиотека позволяет эффективно обрабатывать данные на GPU, обеспечивая простоту использования и высокую скорость выполнения.
🚀Основные моменты:
- Поддержка 15 высокоуровневых примитивов для машинного обучения.
- Информативный API для оценки производительности операций.
- Оптимизированные реализации для кластеризации, регрессии и декомпозиции.
- Легкая интеграция с PyTorch и sklearn.
📌 GitHub: https://github.com/FlashML-org/flashlib
#python
@Python_Community_ru
GitHub
GitHub - FlashML-org/flashlib: Fast and memory-efficient classical machine learning operators
Fast and memory-efficient classical machine learning operators - FlashML-org/flashlib
Nex-N2 - новое любопытное семейство агентных моделей.
Что внутри:
- Adaptive Thinking - модель сама подбирает глубину рассуждения на каждом шаге
- экономия около 20% токенов без потери качества
- Coherent Thinking - единый формат мышления для поиска, кодинга и tool use
- меньше хрупких переключений между разными режимами работы
По заявлению команды, Nex-N2 показывает уровень Tier-1 open-source моделей на SWE-bench, Terminal-Bench, GDPval и других бенчмарках, приближаясь к GPT-5.5 и Opus 4.7.
Звучит мощно, но такие цифры стоит проверять независимыми прогонами.
- Kimi-K2.6: 86% - 13 из 14
- MiniMax: 100% - 8 из 8
- GLM-5.1: 100% - 13 из 13
- DeepSeek-V4-Pro: 92% - 11 из 12
- Opus 4.7: 45% - 5 из 11
- GPT-5.5: 30% - 3 из 10
🔗 https://nex-agi.com
📦 https://huggingface.co/nex-agi/Nex-N2-Pro
https://modelscope.cn/models/nex-agi/Nex-N2-Pro
https://github.com/nex-agi/Nex-N2
@Python_Community_ru
Что внутри:
- Adaptive Thinking - модель сама подбирает глубину рассуждения на каждом шаге
- экономия около 20% токенов без потери качества
- Coherent Thinking - единый формат мышления для поиска, кодинга и tool use
- меньше хрупких переключений между разными режимами работы
По заявлению команды, Nex-N2 показывает уровень Tier-1 open-source моделей на SWE-bench, Terminal-Bench, GDPval и других бенчмарках, приближаясь к GPT-5.5 и Opus 4.7.
Звучит мощно, но такие цифры стоит проверять независимыми прогонами.
- Kimi-K2.6: 86% - 13 из 14
- MiniMax: 100% - 8 из 8
- GLM-5.1: 100% - 13 из 13
- DeepSeek-V4-Pro: 92% - 11 из 12
- Opus 4.7: 45% - 5 из 11
- GPT-5.5: 30% - 3 из 10
🔗 https://nex-agi.com
📦 https://huggingface.co/nex-agi/Nex-N2-Pro
https://modelscope.cn/models/nex-agi/Nex-N2-Pro
https://github.com/nex-agi/Nex-N2
@Python_Community_ru