
Генерация PDF из Python: чек-лист перед продакшеном
Локально PDF собирается за секунду, а на сервере отчёт зависает на 30 секунд и течёт память. Разбираем, что проверить в генерации PDF из Python до релиза: библиотеки, шрифты, память, таймауты.

Локально PDF собирается за секунду, а на сервере отчёт зависает на 30 секунд и течёт память. Разбираем, что проверить в генерации PDF из Python до релиза: библиотеки, шрифты, память, таймауты.

Когда time.sleep в цикле перестаёт справляться, встаёт вопрос выбора планировщика. Разбираем APScheduler, Celery beat, schedule и системный cron — что чем платит и когда какой подходит.

Внешний API отвечает 429 в пиковые часы, токен протух посреди пагинации, а один таймаут кладёт весь ночной импорт. Разбираем, как правильно держать авторизацию, реагировать на лимиты и настраивать повторы в requests и httpx.

Как собирать данные с сайтов на Python, не нарушая закон и не выжигая чужой сервер: robots.txt, rate limiting, легальные источники и разбор частых заблуждений про «обход защиты».

Оба инструмента гоняют браузер из Python, но по-разному ждут элементы, ставятся и параллелятся. Разбираем, где Selenium ещё нужен, а где Playwright снимает половину болей с ожиданиями.

Что выбрать для автоматизации браузера, где Selenium проигрывает Playwright по ожиданиям и как перестать ловить StaleElementReferenceException и таймауты на CI.

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

Пайплайн парсил 200 тысяч страниц за ночь, а стал упираться в 9 часов. Разбираем, где BeautifulSoup и lxml теряют время и когда selectolax даёт трёхкратный выигрыш.

Наивный retry в цикле for кладёт чужой сервис и не защищает вас от каскадных отказов. Разбираем экспоненциальный backoff, джиттер и что выбрать между tenacity, urllib3 и своим кодом.

Обрыв процесса во время open(w) оставляет обрезанный файл, а полный диск — пустой. Разбираем, как записывать так, чтобы читатель всегда видел либо старую, либо целую новую версию.

Строки-статусы вроде «active» и «canceled» кажутся удобными, пока опечатка не проходит все проверки и не ломает логику в проде. Разбираем, чем Enum лучше и когда он мешает.

Ручной commit и rollback в try/except расползается по коду и рано или поздно оставляет открытую транзакцию. Разбираем, как собрать надёжный контекстный менеджер и где он ломается.