
Параллельный парсинг в Python: как делать правильно
Один поток парсит тысячу страниц за 40 минут, потому что 99% времени ждёт ответа сервера. Разбираем, когда брать asyncio, когда потоки, а когда процессы — и чем каждый вариант платит за скорость.

Один поток парсит тысячу страниц за 40 минут, потому что 99% времени ждёт ответа сервера. Разбираем, когда брать asyncio, когда потоки, а когда процессы — и чем каждый вариант платит за скорость.

Тридцать формулировок из реального code review на Python: изменяемые аргументы по умолчанию, голый except, утечки ресурсов и другие вещи, которые линтер не всегда ловит, а ревьюер видит сразу.

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

Как подключить mypy к кодовой базе, где аннотаций нет вообще, и не получить пять тысяч ошибок за один прогон. Настройка, стратегия по модулям и первые проверки.

Аннотации не влияют на выполнение кода — интерпретатор их игнорирует. Разбираем, что они дают на самом деле: подсказки в IDE, документацию и работу mypy, и где начинают лгать.

Разбираем, как декоратор из синтаксического сахара превращается в рабочий инструмент: логирование, замер времени, кеш и проверка прав. С разбором того, что ломается при неаккуратной обёртке.

Скрипт падает с MemoryError на файле в 4 ГБ, потому что читает его целиком в список. Разбираем, как yield и генераторы держат в памяти одну строку вместо миллионов и где этот подход ломается.

Три способа собрать строку в Python — f-строки, метод format и старый процент. Разберём, какой брать по умолчанию и как форматировать числа, даты и выравнивание, чтобы не гуглить каждый раз.

Изменили один элемент во вложенном списке — а поменялись все. Настройка через dict.fromkeys не сработала так, как ждали. Разбираем, где Python подставляет ссылку вместо копии и как это ловить.

За 15 минут разберётесь, как раскладывать кортежи, списки и словари по переменным без индексов, ловить «хвост» через звёздочку и менять значения местами одной строкой.

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

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