📚Python Books
📚Python библиотека admin - @workakkk @ai_machinelearning_big_data - машинное обучение @programming_books_it - бесплатные it книги @pythonl - 🐍 @ArtificialIntelligencedl - AI @datascienceiot - ml РКН: clck.ru/3FmsTi
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام 📚Python Books
تُعد قناة 📚Python Books (@pythonlbooks) لاعباً نشطاً. يضم المجتمع حالياً 33 442 مشتركاً، محتلاً المرتبة 3 899 في فئة التكنولوجيات والتطبيقات والمرتبة 19 090 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 33 442 مشتركاً.
بحسب آخر البيانات بتاريخ 15 سبتمبر, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -165، وفي آخر 24 ساعة بمقدار -5، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 7.69%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 2.48% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 2 573 مشاهدة. وخلال اليوم الأول يجمع عادةً 831 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 0.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل сотрудников, курса, инструменты, использовать, docker.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“📚Python библиотека
admin - @workakkk
@ai_machinelearning_big_data - машинное обучение
@programming_books_it - бесплатные it книги
@pythonl - 🐍
@ArtificialIntelligencedl - AI
@datascienceiot - ml
РКН: clck.ru/3FmsTi”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 16 سبتمبر, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
Meta.indexes можно использовать для собственных миграций
Оказывается, models.Index в Django можно превратить почти в универсальную migration-операцию.
Идея:
class CustomMigrationOperation(models.Index):
def create_sql(self, model, schema_editor, **kwargs):
...
def remove_sql(self, model, schema_editor, **kwargs):
...
А затем добавить её прямо в модель:
class Meta:
indexes = [CustomMigrationOperation()]
После этого makemigrations сам подхватит изменение, а migrate выполнит нужный SQL.
Почему это работает:
Index уже умеет генерировать SQL через create_sql() и remove_sql().
Так можно описывать не только индексы, но и:
triggers
table comments
security labels
другие schema-level настройки
Автор использовал этот приём для PostgreSQL Anonymizer, чтобы правила анонимизации жили рядом с моделью и автоматически попадали в миграции.
Подход довольно hacky, но как способ расширить механизм миграций Django — очень интересный.
https://www.better-simple.com/django/2026/09/02/nifty-feature-use-index-for-custom-migrations/fit(), а реально понять математику и инженерную логику ML.
PDF:
https://smlbook.org/book/sml-book-draft-latest.pdf
#DataScience #MachineLearning #ML #Mathematics #Algorithmsufunc начинали конкурировать за внутренние структуры 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-pythonos.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/