Разъяснивший Python
7.09K subscribers
3.14K photos
43 videos
30 files
3.18K links
Твой проводник в омут Python'а

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: https://telega.in/c/python_pssss
Download Telegram
Пишем свой GraphQL клиент на Python

Эта статья написана как пошаговое руководство по созданию своего GraphQL клиента на Python с нуля, где автор демонстрирует проблемы, возникающие на этом пути. Для наглядности будем использовать открытую схему github GraphQL API.

Читать...

Разъяснивший Python
Работа с поверхностными и глубокими копиями в Python

В этой статье объясняется как делать копии списков Python, массивов NumPy и датафреймов Pandas при помощи операций получения срезов, списочного индексирования (fancy indexing) и логического (boolean indexing). Эти операции очень часто используются при анализе данных и должны рассматриваться всерьёз, поскольку ошибочные предположения могут привести к падению быстродействия или неожиданным результатам.

Читать...

Разъяснивший Python
Метод remove() - помощь в удаление элемента из списка

Списк состоит из строк и целых чисел. Есть повторяющиеся элементы: строка «Mars» и число 12. Задаём отрезок и с помощью метода remove чистим список.

Разъяснивший Python
Объяснение:

copy.copy делает поверхностную копию. Вложенные списки остаются теми же объектами. В результате будет [[1, 2, 99], [3, 4]]

Разъяснивший Python
Backpressure в async Python-сервисах: как bounded queues, лимиты конкуренции и таймауты останавливают cascading failure

Это не микрооптимизация, а механизм выживания backend-сервиса под нагрузкой. В production проблема часто появляется на медленном downstream: таски плодятся, память растет, клиенты ретраят, и падает уже цепочка сервисов.

Очередь не должна быть бесконечной

asyncio.Queue() без maxsize часто превращает память процесса в скрытый буфер аварии. Делайте очередь bounded и решайте, что делать при переполнении: ждать, вернуть 429/503 или отбросить низкоприоритетную работу.

Лимитируйте конкуренцию

Async не означает “можно запустить 100k запросов к API или базе”.

queue = asyncio.Queue(maxsize=1000)
limit = asyncio.Semaphore(50)

async def submit(item):
try:
queue.put_nowait(item)
except asyncio.QueueFull:
raise Overloaded()

async def worker():
while True:
item = await queue.get()
try:
async with limit:
await asyncio.wait_for(
🤬2
📣 Подушка ортопедическая для сидения на стул с эффектом памяти

Цена: ~1000 руб. (без скидки 4900 руб.)
Доставка: бесплатная

🖱 Заказать

Ортопедическая подушка La fete является отличным средством улучшения качества жизни. Она изготовлена из плотного материала пенополиуретан с эффектом памяти.

Подушка поддерживает правильную позицию тела и уменьшает нагрузку на суставы.

#подушка #кресло

Больше полезных товаров в Находки Программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод опорных векторов (SVM): подходы, принцип работы и реализация с нуля на Python

Метод опорных векторов — мощный и универсальный набор алгоритмов для работы с данными любой формы, применяемый не только для задач классификации и регрессии, но и также для выявления аномалий. В этой статье автор рассмотрит основные подходы к созданию SVM, принцип работы, а также реализацию с нуля его наиболее популярных разновидностей.

Читать...

Разъяснивший Python
Вывод строки по отдельным символам

Иногда при работе со строками нам нужны отдельные буквы. В таких случаях мы можем использовать цикл for для перебора символов и их печати.

Разъяснивший Python
Работаем с итерируерыми объектами

Все мы начинали писать на Python примерно одинаково: создавали пустой список, запускали цикл for, проверяли условие через if и делали .append(). Это надежно, предсказуемо, но по мере роста кодовой базы такие конструкции начинают утомлять. В этой статье автор подробно разбирает встроенный инструментарий для работы с итерируемыми объектами.

Читать...

Разъяснивший Python
Когда типизация делает больно: как у нас появился статический анализатор

Язык программирования Python в силу своей динамичности может легко создать ситуацию, когда статический анализатор не может вывести типы и, как следствие, часть проверок отключается. В этой статье автор подробно расскажет о проблеме в разработке системы управления выделенными серверами.

Читать...

Разъяснивший Python
Конвертируем данные и файлы в PDF

Делимся новым циклом видеоматериалов, посвященный работе с текстовыми документами. В первой части автор рассказывает, как конвертируются данные и файлы в PDF с помощью Python.

Смотреть...

Разъяснивший Python
Декораторы классов

В этом примере мы определяем декоратор add_hello, который добавляет вывод "Hello!" перед вызовом метода greet в классе MyClass. Мы применяем декоратор к методу greet с помощью @add_hello, и теперь при вызове obj.greet(), помимо обычного приветствия, будет также выведено "Hello!".

Разъяснивший Python
Пишем свой HEX-редактор

Делимся подробным гайдом по созданию собственного HEX-редактора. Ты не только напишешь редактор, но и разберешься во всех внутренностях проекта: от битового представления до цветовой подсветки.

Читать...

Разъяснивший Python
GIL в threading — это боль, которую многие просто принимают как данность

До Python 3.13 альтернатив не было: multiprocessing с оверхедом и морокой передачи данных, или asyncio, бесполезный при CPU-bound задачах. Реальные кейсы — обработка данных, парсинг, криптография — где threading кажется логичным, но GIL заставляет ядра простаивать, а однопоточный код обгоняет многопоточный.

Кейс из продакшна: пул потоков без прироста

Я написал пул потоков для обработки пакетов данных: каждый поток выполнял CPU-bound трансформацию. GIL не отпускался, прирост 0%. Переписал на multiprocessing — 3x, но память выросла в 4 раза. Типичная ошибка: думать, что threading даст параллелизм для чистых вычислений.

Free-threaded Python 3.13: сборка без GIL

В 3.13 появился флаг --disable-gil. Потоки наконец работают параллельно. На четырех ядрах прирост по CPU-bound задачам — 3-4x. Пример теста:

# threading с GIL (стандартная сборка)
import threading, time

def work():
for _ in range(10**7):
x = 1 + 1

threads = [threading.Thread(target=work) for _ in range(4)]
start = time.time()
for t in threads: t.start()
for t in threads: t.join()
print(f"С GIL: {time.time() - start:.2f}s")
# Вывод: ~2.5s (почти как последовательно)


# free-threaded (сборка без GIL)
# Тот же код — результат ~0.8s (на 4 ядрах)


Разъяснивший Python
This media is not supported in your browser
VIEW IN TELEGRAM
Нейросети уже заменяют носителей языка.

В Telegram быстро набирает популярность ИИ-девушка Chatty, с которой можно голосом практиковать живой разговорный английский и ещё 12 языков на основе новейших моделей искусственного интеллекта. Попробовать можно бесплатно.

🇬🇧 Английский: @ChattyTutorBot
🇩🇪 Немецкий: @ChattyGermanBot
🇪🇸 Испанский: @ChattySpanishBot
🇫🇷 Французский: @ChattyFrenchBot
🇮🇹 Итальянский: @ChattyItalianBot
🇵🇹 Португальский: @ChattyPortugueseBot
🇨🇳 Китайский: @ChattyChineseBot
🇯🇵 Японский: @ChattyJapaneseBot
🇰🇷 Корейский: @ChattyKoreanBot
🇸🇦 Арабский: @ChattyArabicBot
🇹🇷 Турецкий: @ChattyTurkishBot
🇷🇺 Русский: @ChattyRussianBot
🇵🇱 Польский: @ChattyPolandBot
JIT-компилятор Python в 300 строк

В области JIT-компиляции промышленным решением является проект Numba, спонсируемый такими технологическими гигантами как Intel, AMD и NVIDIA. Именно с этим пакетом автор и решил посоревноваться, написав миниатюрный JIT-компилятор программ на Питоне.

В этой статье автор расскажет, с какими трудностями он, как программист достаточно прикладной, столкнулся при разработке такой довольно низкоуровневой вещи, как миниатюрный JIT-компилятор.

Читать...

Разъяснивший Python
Выявление проблем в log-файлах с помощью аналитики

Log-файлы систематически записывают хронологию событий, происходящих в системе. Это может быть что угодно: от записи о запуске программы до детальной информации об ошибках и предупреждениях. Для нас log-файлы — это не просто дневники событий, а очень хороший инструмент для диагностики и устранения проблем.

Читать...

Разъяснивший Python