📚Python Books
33.7K subscribers
1.13K photos
3 videos
93 files
1.12K links
📚Python библиотека

admin - @haarrp

@ai_machinelearning_big_data - машинное обучение

@programming_books_it - бесплатные it книги

@pythonl - 🐍

@ArtificialIntelligencedl - AI

@datascienceiot - ml

РКН: clck.ru/3FmsTi
Download Telegram
interlock: Circuit Breaker That Trips on Failure Rate and Latency

https://github.com/bagowix/interlock
One Day Offer для Python-разработчиков!💚

15 августа открываем двери в команду Agent Execution Framework ⚡️

Коллеги создают платформу для GenAI‑агентов в банке — делают так, чтобы ИИ реально работал в серьёзных финпроцессах: с безопасностью, нагрузкой и пользой.

Чем предстоит заниматься:

✔️ развивать backend на Python
✔️ подключать LLM, инструменты, базы знаний и RAG
✔️ строить пайплайны оценки качества агентов
✔️ участвовать в архитектуре и ревью кода

Встречаемся 15 августа онлайн.

Регистрируйся по ссылке
Бесплатный учебник по математике — 850 страниц.

«The Rising Sea: Foundations of Algebraic Geometry» Рави Вакила.


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

Требуется минимум предварительных знаний: необходимые инструменты вводятся по ходу материала — от теории категорий и пучков до коммутативной и гомологической алгебры.

Подход построен на примерах и помогает развить математическую интуицию.

Самодостаточный учебник для студентов магистратуры и аспирантуры, а также важный справочник для исследователей.


Link: https://math.stanford.edu/~vakil/216blog/
🔴 Завтра тестовое собеседование на Middle Python с разработчиком из Авито

Уже завтра вечером в 19:00 по мск
приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.

Как это будет:
📂 Даня, старший разработчик в Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даня будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Дане

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot

Реклама.
О рекламодателе.
🐍 Как правильно запускать внешние команды из Python

Для большинства задач не нужны os.system() или низкоуровневый Popen. Достаточно subprocess.run() - он запускает программу, передаёт аргументы, возвращает код завершения и позволяет получить вывод.


import subprocess

result = subprocess.run(
["git", "status", "--short"],
capture_output=True,
text=True,
check=True,
timeout=10,
)

print(result.stdout)


Что здесь происходит:

- capture_output=True сохраняет stdout и stderr
- text=True возвращает строки вместо bytes
- check=True выбрасывает CalledProcessError, если команда завершилась с ошибкой
- timeout=10 не позволяет процессу зависнуть навсегда

Ошибки лучше обрабатывать явно:


import subprocess

try:
result = subprocess.run(
["git", "status", "--short"],
capture_output=True,
text=True,
check=True,
timeout=10,
)
except subprocess.TimeoutExpired:
print("Команда выполнялась слишком долго")
except subprocess.CalledProcessError as error:
print(error.stderr)
else:
print(result.stdout)


Передавайте команду списком аргументов. shell=True нужен редко и может создать уязвимость к внедрению команд, особенно если строка содержит пользовательские данные.

subprocess.run() - простой и надёжный мост между Python и системными утилитами, Git, компиляторами, CLI-инструментами и другими программами.

Подробнее:
https://pythonmorsels.com/running-subprocesses-in-python/
Лето, ИТ-Пикник и музыка известных артистов уже через несколько дней!

8 августа в Коломенском пройдет ИТ-Пикник.

В программе — выступления проекта LAB Антона Беляева, IOWA, Cream Soda, Pompeya, мартина и Совы.

А днем — научпоп-лекции, дискуссии об ИИ и больших языковых моделях, мастер-классы и интерактивы. Полезные знакомства и развлечения тоже будут.

Зарегистрироваться и узнать подробности можно на сайте мероприятия.

В билет входит +1 — можно позвать близких и друзей.

До встречи в месте притяжения ИТ.
🐍 Free-threaded Python убрал GIL, но NumPy всё равно упирался во внутренние блокировки

Казалось бы, Python 3.13+ без GIL должен позволить нескольким потокам одновременно выполнять численные операции.

Но на практике параллельные ufunc начинали конкурировать за внутренние структуры NumPy, счётчики ссылок и выделение памяти.

В NumPy 2.5 разработчики устранили несколько ключевых узких мест:

- таблицу диспетчеризации ufunc заменили на lock-free concurrent hash map;
- часть общих служебных объектов сделали «бессмертными», снизив конкуренцию при подсчёте ссылок;
- выделение памяти перевели на PyMem_RawMalloc и PyMem_RawFree.

Теперь независимые операции можно масштабировать обычными потоками:


from concurrent.futures import ThreadPoolExecutor

import numpy as np

arrays = [
np.random.rand(5_000_000)
for _ in range(8)
]

with ThreadPoolExecutor(max_workers=8) as pool:
results = list(pool.map(np.sin, arrays))


Главное преимущество перед multiprocessing - массивы не нужно сериализовать и копировать между процессами.

Потоки работают в одном адресном пространстве, поэтому могут эффективнее использовать многоядерный CPU и общую память.

Но есть важная оговорка:

free-threaded не означает автоматически thread-safe.

Одновременное изменение одного ndarray из нескольких потоков всё ещё может привести к гонкам, повреждённым данным и падению интерпретатора.

Безопаснее использовать:

- отдельный массив для каждого worker;
- общий массив только для чтения;
- явную синхронизацию при записи.

Удалить GIL оказалось недостаточно. Чтобы Python действительно масштабировался по ядрам, пришлось перепроектировать и внутренности NumPy.

Подробнее:
https://labs.quansight.org/blog/scaling-numpy-on-free-threaded-python