Python Hub - сборище Питонистов
الذهاب إلى القناة على Telegram
Уголок счастья для любого питониста. Сотрудничество или заказы: @leshunist https://shcoder.dev - студия разработки ShcoderDevelopment https://t.me/pythonhub_chat - чат
إظهار المزيد1 712
المشتركون
لا توجد بيانات24 ساعات
-97 أيام
-1330 أيام
أرشيف المشاركات
Профилирование Python-кода: Ваш путь к оптимизации! 🚀
1. Зачем нужно профилирование? 🤔
Представьте, что ваш код - это спортивный автомобиль. Профилирование - это как диагностика двигателя. Оно помогает найти "узкие места" и раскрыть истинный потенциал вашего кода. Круто, правда? 😎
2. cProfile: Ваш верный помощник 🦸♂️
cProfile - это встроенный инструмент Python для профилирования. Он как супергерой, который анализирует каждую функцию вашего кода.
import cProfile
def my_function():
# Ваш код здесь
pass
cProfile.run('my_function()')
Вуаля! 🎩✨ Теперь у вас есть детальный отчет о работе вашей функции.
3. line_profiler: Микроскоп для вашего кода 🔬
Если cProfile - это общая картина, то line_profiler - это микроскоп. Он анализирует каждую строку кода. Потрясающе, не так ли?
@profile
def my_function():
# Ваш код здесь
pass
# Запустите с: kernprof -l -v your_script.py
Теперь вы видите, сколько времени занимает каждая строка. Это как рентген для вашего кода! 📊
4. Практические советы 💡
- 🟠Профилируйте регулярно: Это как чистка зубов для вашего кода!
- 🟠 Фокусируйтесь на горячих точках: 80% времени обычно тратится на 20% кода.
- 🟠 Не оптимизируйте преждевременно: Сначала убедитесь, что код работает правильно.
5. Заключение: Станьте мастером оптимизации! 🏆
Профилирование - это ваш секретный ингредиент для создания быстрого и эффективного Python-кода. С cProfile и line_profiler в вашем арсенале, вы готовы покорить любые вершины производительности! 🚀
Помните: великая сила профилирования приходит с великой ответственностью. Используйте её мудро, и ваш код будет летать! 💻🚀 Создание многопоточных приложений с concurrent.futures в Python (основы)
🧠 Что такое concurrent.futures?
Представьте, что вы супергерой, способный делать несколько дел одновременно. Это и есть concurrent.futures! 🦸♂️ Этот мощный модуль в Python позволяет вам выполнять задачи параллельно, экономя драгоценное время и ресурсы.
🛠 Основные инструменты
В нашем арсенале два главных оружия:
- 🧵 ThreadPoolExecutor - для задач, связанных с вводом-выводом
- 🖥 ProcessPoolExecutor - для вычислительно-интенсивных задач
💻 Давайте напишем код!
Вот простой пример использования ThreadPoolExecutor:
import concurrent.futures
import time
def task(name):
print(f"Задача {name} начата")
time.sleep(2)
return f"Задача {name} завершена"
with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
tasks = [executor.submit(task, f"#{i}") for i in range(5)]
for future in concurrent.futures.as_completed(tasks):
print(future.result())
🎉 Вуаля! Мы только что создали многопоточное приложение, которое выполняет 5 задач параллельно, используя пул из 3 потоков.
✅ Преимущества использования concurrent.futures
- ⚡️ Повышение производительности
- 🧩 Простота использования
- 🔄 Автоматическое управление потоками
- 🎛 Гибкость в настройке
🔺 Заключение
Поздравляем! Теперь вы знаете, как создавать многопоточные приложения с помощью concurrent.futures. Это мощный инструмент, который поможет вам писать более эффективный и быстрый код. Не забывайте практиковаться и экспериментировать - ведь в мире многопоточности возможности безграничны! 🌈
Удачи в ваших кодерских приключениях! 💻✨Топ 3 расширения для VSCode 👩💻
➡️ autoDocstring
Быстро генерирует докстринги по шаблону. Удобно когда пишешь либы. Скачать можно тут
➡️ Auto-Collapse Folders
Сворачивает все лишние папки, оставляет открытой только ту, в которой ты находишься.
Скачать можно тут
➡️ Code Spell Checker
Проверяет написания всех слов, исправляет опечатки. Скачивай тут. Чтобы был русский язык качай еще это
Ставьте 👍 и заходите в наш чатик)
+2
Python и все, что с ним связано и для него нужно держится в топ 10 всех трех списков🤘🏻
Что думаете на данный счет?🤨
Больше статистик в этом посте.
🟢 Введение в FastStream (кратко) 🌊
FastStream - это мощная библиотека для Python, которая упрощает создание и управление потоковыми приложениями. Она предоставляет удобный интерфейс для работы с различными брокерами сообщений, такими как Kafka и RabbitMQ. 🐰🐘
✅ Основные преимущества FastStream 🌟
- 🔧 Простота использования
- 🚀 Высокая производительность
- 🔄 Поддержка асинхронного программирования
- 🔌 Легкая интеграция с существующими проектами
💠 Установка FastStream 💻
Для начала работы с FastStream, установите библиотеку с помощью pip:
pip install faststream
## Пример использования FastStream с Kafka 🚀
Давайте рассмотрим простой пример использования FastStream с Kafka:
from faststream import FastStream, Logger
from faststream.kafka import KafkaBroker
# Создаем брокер Kafka
broker = KafkaBroker("localhost:9092")
# Инициализируем FastStream
app = FastStream(broker)
# Определяем обработчик сообщений
@broker.subscriber("input-topic")
async def process_message(msg: str, logger: Logger):
logger.info(f"Получено сообщение: {msg}")
# Обработка сообщения
processed_msg = msg.upper()
# Отправка обработанного сообщения
await broker.publish(processed_msg, "output-topic")
# Запускаем приложение
if __name__ == "__main__":
app.run()
➡️ Объяснение примера 🧐
В этом примере мы:
1. Импортируем необходимые модули из FastStream.
2. Создаем брокер Kafka, указывая адрес сервера.
3. Инициализируем FastStream с нашим брокером.
4. Определяем функцию-обработчик сообщений с декоратором @broker.subscriber.
5. В обработчике мы логируем полученное сообщение, преобразуем его в верхний регистр и отправляем в другую тему.
6. Запускаем приложение с помощью app.run().
смотреть больше примеров можно тут в статьеРазбор 👨💻
Большинство людей попалось на уловке с 27/3. Дело в том, что деление в Python всегда выдает дробное число. То бишь 27/3 —> 9.0. Если вы хотите получить целое, то используйте // (целочисленное деление)
💸💸Полезный видос с оплатой в телеге!💸💸
https://www.youtube.com/watch?v=JOdyz-Mokac
❗️Что такое Legacy код?❗️
Legacy код, или унаследованный код, - это существующая кодовая база, которая продолжает использоваться, несмотря на то, что она может быть устаревшей, плохо структурированной или трудной для поддержки. 🏛
➡️ Характеристики Legacy кода 📊
- Устаревшие технологии или методологии 🕰
- Отсутствие или недостаточность документации 📄
- Сложность в поддержке и расширении 🔧
- Высокая связность и низкая сплоченность 🔗
➡️ Примеры Legacy кода на разных языках 💻
😅 Python
# Legacy код на Python
def calculate_total(items):
total = 0
for item in items:
total = total + item['price'] * item['quantity']
return total
# Современный эквивалент
def calculate_total(items):
return sum(item['price'] * item['quantity'] for item in items)
😄 C++ 🔨 и Java ☕️ коды доступны в нашем телеграм канале, посвященному разработке не только на Python
➡️ Проблемы, связанные с Legacy кодом 🚧
- Сложность внесения изменений и добавления новых функций 🔒
- Повышенный риск появления ошибок при модификации 🐛
- Трудности в интеграции с современными технологиями 🔌
- Зависимость от устаревших библиотек и фреймворков 📚
➡️ Стратегии работы с Legacy кодом 🛠
- Постепенный рефакторинг 🔄
- Написание тестов для существующего кода 🧪
- Документирование существующей функциональности 📝
- Модульная замена частей системы 🧩
🔺 Заключение
Работа с Legacy кодом - это неизбежная часть жизни многих разработчиков. Хотя он может представлять сложности, правильный подход к его обработке может значительно улучшить качество и поддерживаемость программного обеспечения. 🌟❗️Работа с памятью: weakref модуль в Python❗️
⏺1. Модуль weakref 🔗
Модуль weakref предоставляет инструменты для создания слабых ссылок на объекты. 🛠
➡️ Что такое слабые ссылки? 🤔
Слабые ссылки позволяют ссылаться на объект без увеличения его счетчика ссылок. Это означает, что объект может быть удален сборщиком мусора, даже если на него есть слабая ссылка. 🗑
➡️ Пример использования weakref:
import weakref
class MyClass:
pass
obj = MyClass()
weak_ref = weakref.ref(obj)
print(weak_ref()) # Выводит объект MyClass
del obj
print(weak_ref()) # Выводит None
🔺 Заключение 🎓
Использование модуля weakref позволяет разработчикам Python лучше контролировать управление памятью в своих программах. Это особенно полезно при работе с большими объемами данных или в системах с ограниченными ресурсами. 💡❗️Работа с памятью: weakref и gc модули в Python❗️
⏺1. Модуль weakref 🔗
Модуль weakref предоставляет инструменты для создания слабых ссылок на объекты. 🛠
➡️ Что такое слабые ссылки? 🤔
Слабые ссылки позволяют ссылаться на объект без увеличения его счетчика ссылок. Это означает, что объект может быть удален сборщиком мусора, даже если на него есть слабая ссылка. 🗑
➡️ Пример использования weakref:
import weakref
class MyClass:
pass
obj = MyClass()
weak_ref = weakref.ref(obj)
print(weak_ref()) # Выводит объект MyClass
del obj
print(weak_ref()) # Выводит None
⏺ 2. Модуль gc (Garbage Collector) 🧹
Модуль gc предоставляет интерфейс для управления сборщиком мусора в Python. 🕹
➡️ Основные функции gc:
- gc.collect(): Запускает сборку мусора вручную 🔄
- gc.disable(): Отключает автоматическую сборку мусора ⏸
- gc.enable(): Включает автоматическую сборку мусора ▶️
- gc.get_count(): Возвращает количество объектов, отслеживаемых сборщиком мусора 📊
➡️ Пример использования gc:
import gc
# Создаем циклическую ссылку
l = []
l.append(l)
# Запускаем сборку мусора
collected = gc.collect()
print(f"Собрано {collected} объектов.")
# Отключаем автоматическую сборку мусора
gc.disable()
# Важный код, требующий точного контроля над памятью
# ...
# Снова включаем автоматическую сборку мусора
gc.enable()
🔺 Заключение 🎓
Использование модулей weakref и gc позволяет разработчикам Python лучше контролировать управление памятью в своих программах. Это особенно полезно при работе с большими объемами данных или в системах с ограниченными ресурсами. 💡✨ Друзья, у нас отличные новости! ✨
Теперь вы можете писать и публиковать свои статьи на различные IT-темы на нашем сайте — devgurt.com 🖥. Лучшие работы и авторы будут отмечены и вознаграждены! 💻
Статьи будут попадать в нашу группу с указанием автора, если вы пожелаете!©️
А ещё, мы запустили второй телеграм-канал — @devgurt 🚀.
Там будут появляться статьи не только по Python, но и по программированию и технологиям в целом. Присоединяйтесь и будьте в курсе всех новинок! 🔥
Подписывайтесь и делитесь своими знаниями с сообществом! 😉
🔥 Параллельная обработка данных с Dask в Python: Мощь и Простота
➡️Что такое Dask? 🤔
Dask - это гибкая библиотека для параллельных вычислений в Python. Она позволяет обрабатывать большие объемы данных, распределяя нагрузку на несколько ядер процессора или даже на кластер компьютеров. 💻➡️💻➡️💻
➡️ Почему Dask? 🌟
- Масштабируемость: от ноутбука до кластера 📈
- Совместимость с экосистемой Python (NumPy, Pandas) 🐍
- Ленивые вычисления для оптимизации 🦥
➡️ Примеры использования Dask 💡
➡️1. Параллельные вычисления с Dask Array 📊
import dask.array as da
# Создаем большой массив
x = da.random.random((10000, 10000), chunks=(1000, 1000))
# Выполняем операции
result = (x + 1).mean().compute()
print(f"Среднее значение: {result}")
➡️ 2. Обработка больших DataFrame с Dask 📈
import dask.dataframe as dd
# Читаем большой CSV файл
df = dd.read_csv('huge_file.csv')
# Выполняем группировку и агрегацию
result = df.groupby('category').agg({'value': 'mean'}).compute()
print(result)
➡️ 3. Параллельное применение функций с Dask Delayed 🔄
from dask import delayed
@delayed
def process_data(x):
# Здесь может быть сложная обработка
return x * 2
data = [1, 2, 3, 4, 5]
results = [process_data(x) for x in data]
final_result = delayed(sum)(results).compute()
print(f"Итоговый результат: {final_result}")
➡️ Заключение 🎉
Dask - это мощный инструмент для параллельной обработки данных в Python. Он позволяет легко масштабировать ваши вычисления и работать с большими объемами данных эффективно. Начните использовать Dask сегодня и ощутите разницу в скорости обработки ваших данных! 🚀Создание собственных декораторов с functools.wraps на Python 🐍✨
Что такое декораторы? 🤔
Декораторы в Python - это мощный инструмент для изменения поведения функций или классов без изменения их исходного кода. Они позволяют "обернуть" существующую функцию дополнительной функциональностью.
Зачем нужен functools.wraps? 🎁
При создании декораторов возникает проблема: метаданные декорируемой функции (такие как имя и документация) теряются. Здесь на помощь приходит functools.wraps!
Пример декоратора без functools.wraps 😕
def my_decorator(func):
def wrapper(*args, **kwargs):
print("До выполнения функции")
result = func(*args, **kwargs)
print("После выполнения функции")
return result
return wrapper
@my_decorator
def greet(name):
"""Эта функция приветствует пользователя"""
print(f"Привет, {name}!")
print(greet.__name__) # Выводит: wrapper
print(greet.__doc__) # Выводит: None
Пример с использованием functools.wraps 🌟
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("До выполнения функции")
result = func(*args, **kwargs)
print("После выполнения функции")
return result
return wrapper
@my_decorator
def greet(name):
"""Эта функция приветствует пользователя"""
print(f"Привет, {name}!")
print(greet.__name__) # Выводит: greet
print(greet.__doc__) # Выводит: Эта функция приветствует пользователя
Преимущества использования functools.wraps 🏆
1. Сохранение метаданных функции
2. Улучшение отладки и документирования
3. Совместимость с инструментами анализа кода1️⃣. Привычно ли смотреть на текст НАД картинкой?🧐
2️⃣. Стоит ли применять такую логику в постах?
3️⃣. За что вы начали ставить дизлайки?🫣😔
4️⃣. Знали, что платный контент нельзя редачить? Знайте!
Купите возможность посмотреть на черный квадрат😏
p.s. хочу посмотреть на то, как работают TG STARS
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
