Программистика
Закрытый канал
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
Больше5 790
Подписчики
-524 часа
+137 дней
-4430 дней
Архив постов
5 790
Джуны — всё, ИИ победил. По статистике BCG, за последний год компании выбросили на улицу 75% молодняка. При этом миддлам и сеньорам зарплаты подняли в 4 (!) раза.
Чтобы подняться до уровня элит в аномально короткие сроки — подпишитесь на легендарные каналы для айтишников:
Новости и инсайды
Фронтенд разработка
ИИ и биг дата
Node js
Вёрстка
Питон и нейросети
QA-тестировщики
Там раскрыли инфу из курсов общей стоимостью 5.000.000р в эксклюзивных пошаговых инструкциях. Пока остальные пойдут на дно якорем, вы войдете в 10% тех, кто сломал систему.
5 790
👩💻 asyncio debugging — почему task зависла и не выполнится
Ты добавил
async/await, но задача так и не закончилась. Event loop крутится, а результата нет. И непонятно, где искать проблему — никаких ошибок, просто тишина.
🧱 Главные причины, почему task зависает
🟢 Забыл `await` — корутина вообще не запустилась:
async def fetch_data():
asyncio.sleep(1) # ❌ без await не работает
return "done"
Корутина создана, но не выполняется. Python даже warning не покажет, пока объект не удалится из памяти.
🟢 Используешь блокирующие вызовы — event loop встал:
async def process():
time.sleep(2) # ❌ блокирует весь loop
Все остальные task'и ждут, пока этот завершится. Используй await asyncio.sleep() или loop.run_in_executor() для синхронного кода.[4][5][6]
🟢 Создал task, но не дождался его завершения:
async def main():
asyncio.create_task(work())
# main() закончился → task убит
Task запустился, но main завершился раньше — незавершённые задачи просто отбрасываются.
✔️ Нужно так:
task = asyncio.create_task(work())
await task # или asyncio.gather()
🟢 Бесконечный цикл без `await` внутри:
async def loop_task():
while True:
do_something() # нет await
Event loop не может переключиться на другие задачи — они зависнут навсегда.[9]
📌 Как правильно дебажить
1️⃣ Включи debug mode — сразу увидишь проблемы:
asyncio.run(main(), debug=True)
или через переменную окружения:
PYTHONASYNCIODEBUG=1 python script.py
Покажет:
🟢 где корутина создана, но не awaited 🟢 какие task'и выполняются слишком долго (> 100ms) 🟢 где нарушена thread-safety2️⃣ Отслеживай "долгие" task'и вручную:
import time
TASK_DICT = {}
async def monitor_tasks(limit_sec=3):
while True:
for task in asyncio.all_tasks():
name = task.get_name()
if name not in TASK_DICT:
TASK_DICT[name] = time.monotonic()
duration = time.monotonic() - TASK_DICT[name]
if duration > limit_sec:
print(f'{name} зависла: {duration:.2f}s')
await asyncio.sleep(1)
Такой подход ловит задачи, которые живут слишком долго, даже если они не завершились.
3️⃣ Используй `asyncio.wait_for()` с таймаутом:
try:
result = await asyncio.wait_for(slow_task(), timeout=5.0)
except asyncio.TimeoutError:
print("Task застряла!")
4️⃣ Логируй всё подозрительное:
import logging
logging.basicConfig(level=logging.DEBUG)
async def risky_task():
logging.debug("Task started")
await something()
logging.debug("Task done")
Если второе сообщение не появилось — знаешь, где искать.
🧪 Бонус: отлов незавершённых задач при выходе
async def main():
try:
await asyncio.gather(task1(), task2())
finally:
tasks = [t for t in asyncio.all_tasks() if not t.done()]
for task in tasks:
task.cancel()
await asyncio.gather(*tasks, return_exceptions=True)
💡 Запомни:
📌 Без await корутина не запустится — только создастся объект 📌 Блокирующий код = застывший event loop 📌 Debug mode обязателен во время разработки 📌 asyncio.wait_for() с таймаутом спасает от вечного ожидания 📌 Незавершённые task'и при выходе из main — это утечка и багПрограммистика || #Статья
5 790
⚡️ Linux и DevOps теперь в Telegram!
Ребята делают реально классный канал про IT — просто, понятно и без воды.
О Linux, DevOps, разработке, безопасности и инструментах, которые помогают работать эффективнее.
Подписывайтесь: @recura_tech
5 790
👀 Сохрани меня, если сможешь: модули и файлы в Python
Вы узнаете, как сохранять и читать данные, разбивать код на удобные части, использовать сторонние библиотеки, управлять зависимостями и работать с виртуальным окружением.
Курс идеально подходит для выпускников «Функционального программирования на Python» и всех, кто хочет перейти от простых скриптов к созданию настоящих Python-проектов!
🌐 СсылкаПрограммистика || #Course
5 790
⚡️⚡️Новую базу курсов слили в сеть — хакеры снова выложили в паблик тонну курсов по IT от онлайн школ.
Материала почти на пол-терабайта, мы загрузили всё на канал, там есть:
🐍 Python и нейросети (28 полных курсов + библиотеки)
📈 Data Analysis + машинное обучение (15 курсов)
👨🏻💻 Frontend (от JS до React) — (20 курсов + библиотеки)
🤖 Backend + базы Данных (30 курсов)
🛡 Информационная безопасность (Защита+Атака) — (14 курсов)
🎮 Разработка игр (11 курсов)
Всё можно забрать бесплатно и смотреть без скачивания ➡️ @IT_SLIV
5 790
👀 Базовые алгоритмы. Реализация на Python и C++ на примере классических игр
В книге дается базовая алгоритмическая подготовка, классические алгоритмы разобраны одновременно на двух языках — C++ и Python на примере широко известных и интуитивно понятных компьютерных игр. Наглядно излагается реализация циклов, перебора, рекурсии, эвристики, рассматривается работа с деревьями решений, на примере шахмат предлагается знакомство с прямоугольными координатами, дается введение в самообучающиеся алгоритмы. Книга ориентирована как на начинающих программистов, так и на читателей, планирующих перейти на C++ или Python как на второй язык. Примеры, рассмотренные в книге, помогут сделать первые шаги на пути к профессиональному программированию игр.
Программистика || #Книги
5 790
👩💻 Type Hints без иллюзий: Python не станет статически типизированным
Все ставят type hints везде, думают, что это сделает код быстрее или предотвратит ошибки в runtime. Спойлер: нет. Type hints — это подсказки для тебя и для инструментов, а не для Python.
🧱 Типичные заблуждения
🟡 "Type hints делают код быстрее"
def add(a: int, b: int) -> int:
return a + b
add("hello", "world") # Работает! Python игнорирует hints
Результат: Python полностью игнорирует type hints в runtime. Никакой проверки, никакого ускорения.
🟡 "Type hints защищают от ошибок"
def greet(name: str) -> str:
return f"Hello, {name}"
greet(123) # Работает без ошибок!
Python не проверяет типы. Нужен mypy или pyright.
🟡 "Type hints нужны везде"
x: int = 5
y: str = "hello"
z: bool = True
Результат: захламлённый код. Type hints нужны где есть неочевидность, а не везде подряд.
🟡 "Hints замедляют код"
На самом деле: минимальный overhead только при загрузке модуля. В runtime — ноль влияния.
📌 Зачем они РЕАЛЬНО нужны
1️⃣ IDE видит типы → автодополнение работает
Без hints:
def process_data(data):
return data.split() # IDE не знает, что у data есть .split()
С hints:
def process_data(data: str) -> list[str]:
return data.split() # IDE знает, что data это str
Результат: автодополнение, подсказки методов, меньше ошибок при написании.
2️⃣ Статические анализаторы (mypy, pyright) ловят баги ДО запуска
def add_numbers(a: int, b: int) -> int:
return a + b
result = add_numbers(5, "10") # mypy/pyright: ERROR!
Запускаешь mypy script.py → видишь ошибку до запуска кода.[1][3]
3️⃣ Документация "в коде"
Без hints:
def fetch_user(user_id):
# Что такое user_id? str? int? UUID?
pass
С hints:
def fetch_user(user_id: int) -> dict[str, Any]:
# Понятно: на вход int, на выход словарь
pass
Результат: код читается как документация.[5][3]
4️⃣ Снижение багов в production
Пример из AI/ML:
def train_model(data):
# Кто-то передал NumPy array вместо PyTorch tensor
# Код упал через 3 часа обучения
pass
С hints:
import torch
def train_model(data: torch.Tensor) -> None:
# mypy сразу покажет ошибку, если передать не Tensor
pass
Результат: ошибки ловятся на этапе разработки, а не в production.
📌 Как правильно использовать
1️⃣ Базовые типы
def greet(name: str, age: int) -> str:
return f"{name} is {age} years old"
# Переменные (редко нужно)
x: int = 5
2️⃣ Списки, словари, множества
Python 3.9+:
def process_items(items: list[str]) -> dict[str, int]:
return {item: len(item) for item in items}
# Старый синтаксис (не используй)
from typing import List, Dict
def process_items(items: List[str]) -> Dict[str, int]:
pass
3️⃣ Optional (может быть None)
def find_user(user_id: int) -> str | None:
# Может вернуть str или None
if user_id > 0:
return "Alice"
return None
4️⃣ Union
def process_input(data: int | str) -> str:
if isinstance(data, int):
return str(data)
return data
5️⃣ Callable
from collections.abc import Callable
def execute(func: Callable[[int, int], int], a: int, b: int) -> int:
return func(a, b)
execute(lambda x, y: x + y, 5, 3) # OK
6️⃣ Generics
from typing import TypeVar
T = TypeVar('T')
def first_element(items: list[T]) -> T | None:
return items[0] if items else None
result = first_element([1, 2, 3]) # result: int | None
📌 Инструменты для проверки типов
Mypy — классика, написан на Python:
pip install mypy
mypy script.py
Pyright — от Microsoft, очень быстрый:
pip install pyright
pyright script.py
1. Не пиши hints везде
# Плохо
x: int = 5
y: str = "hello"
# Хорошо
x = 5 # Очевидно
y = "hello" # Очевидно
2. Пиши hints для функций
# Хорошо
def calculate_total(price: float, quantity: int) -> float:
return price * quantity
💡 Запомни:
👉 Type hints — для инструментов, не для Python 👉 Python игнорирует hints в runtime 👉 Нужен mypy/pyright для проверкиПрограммистика || #Статья
5 790
🖥 AI Math Notes - это интерактивное приложение, которое позволяет рисовть математические формулы на доске и получитать решения.
Как только уравнение написано, приложение использует мультимодальный LLM для его решения. Приложение построено с использованием Python с библиотекой Tkinter для графического интерфейса пользователя и PIL для обработки изображений.🐱 Ссылка на GitHub Программистика || #Library
5 790
🗺 Roadmap.sh Python: Карта развития питониста
Roadmap.sh Python — визуальная карта для изучения Python с разбором по направлениям: backend, data science, DevOps. Показывает последовательность обучения и зависимости между навыками. Помогает не прыгать как сумасшедший.
🌐Ссылка на сервисПрограммистика || #Ресурсы
5 790
Cursor — твой AI-партнёр в разработке ПО
Устали тратить время на поиск ошибок и шаблонный код?
Cursor — это среда разработки нового поколения с искусственным интеллектом, которая помогает писать, анализировать и улучшать код быстрее, чем когда-либо.
Что умеет Cursor:
• Пишет и дополняет код на естественном языке
• Находит и исправляет ошибки
• Предлагает оптимизации и лучшие практики
• Объясняет сложные участки кода
• Работает как полноценная IDE, только умнее
Сосредоточьтесь на архитектуре и логике — рутину возьмёт на себя ИИ.
Поставщик Cursor в России — компания «Системный софт».
Оплата в рублях, закрывающие документы и поддержка при подключении.
Попробуйте Cursor уже сегодня: https://clck.ru/3QJ7Ke
Перейти на сайт
#реклама 16+
syssoft.ru
О рекламодателе
5 790
🖥 Django-Tastypie — это библиотека для создания REST API в Django, которая упрощает процесс работы с данными, сериализацией и аутентификацией!
Она поддерживает различные форматы данных (JSON, XML, YAML), позволяет работать как с SQL, так и NoSQL базами и предоставляет встроенные инструменты для фильтрации, сортировки и пагинации запросов. Tastypie минимизирует необходимость написания повторяющегося кода, позволяя разработчикам быстро создавать мощные API.
🐱 Ссылка на GitHub
Программистика || #Library
5 790
"Ты че, дурак?" – базовая реакция сеньора на тех, кто покупает IT курсы
Дело в том, что онлайн школы создают инкубаторных айтишников, которые в реальных условиях попросту зависнут.
Трушные ребята учатся на жизненных каналах для айтишников. Вот топ-5 от тимлида из Сбера:
⚙️ Технолоджия – для тех, кто хочет быть в курсе новостей в айти
🧠 Ai-чница – способы превратить нейросети в заработок $$$
💻 ИИ тебя заменит! – тенденции айти рынка в связке с нейросетями
4️⃣ Войти в IT – тонны бесплатного обучения для прогеров
😄 IT индус – сборник айти мемов
5 790
Мощный Python: паттерны и стратегии современного программирования
Как стать экспертом в создании сложных и мощных приложений на Python, не тратя время на повторение уже известных основ или перечисление ненужных функций? Аарон Максвелл фокусируется на первопринципах Python, которые действуют подобно катализаторам для всего остального: достаточно получить 5 % знаний в области программирования, чтобы остальные 95 % подтянулись автоматически.Программистика|| #Книги
5 790
Теперь перед каждым коммитом автоматически:
🟢 Форматируется код (Black) 🟢 Проверяется стиль (Flake8) 🟢 Удаляются лишние пробелы 🟢 Проверяются большие файлы8️⃣ GitHub Actions для CI/CD Создай
.github/workflows/test.yml:
name: Run Tests
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: |
pytest tests/
- name: Lint with flake8
run: |
pip install flake8
flake8 src/
👍Теперь при каждом PR автоматически запускаются тесты и проверки.
🧪 Бонус: как откатить ошибки
Отменить последний коммит (не запушен):
git reset --soft HEAD~1 # Сохранить изменения
git reset --hard HEAD~1 # Удалить изменения
Отменить изменения в файле:
git checkout -- filename.py
Вернуться к конкретному коммиту:
git log # Найди хеш коммита
git checkout <commit-hash>
Удалить файл из Git, но оставить локально:
git rm --cached secret.env
💡 Запомни:
⭐️ .gitignore — твоя первая линия защиты ⭐️ Секреты — только в .env, никогда в код ⭐️ Коммиты — осмысленные, не "asdasd" ⭐️ Ветки — для каждой фичи отдельно ⭐️ requirements.txt — с фиксированными версиями ⭐️ Pre-commit hooks — автоматизация спасает ⭐️ GitHub Actions — CI/CD из коробкиПрограммистика || #Статья
