MiddlePython Developer > Основы Python > Потоки и синхронизация
Короткий ответ RLock (reentrant lock) позволяет одному и тому же потоку захватывать лок повторно без самоблокировки (счётчик захватов), тогда как обычный Lock заблокирует поток при попытке повторного захвата уже удержанного им же лока, что приведёт к дедлоку. Как это работает подробнее RLock хранит, какой поток владеет локом, и счётчик вложенных acquire(); release() нужно вызывать столько же раз, сколько было acquire(), прежде чем лок станет доступен другим потокам. Обычный Lock не знает про владельца — повторный вызов acquire() из того же потока блокируется. Пример кода Что использовать на практике Практика. RLock нужен, когда метод, уже держащий лок, вызывает другой метод того же объекта, который тоже пытается захватить тот же лок (рекурсивные или вложенные вызовы). Если такой вложенности нет, обычный Lock обычно достаточен и немного быстрее. Подводные камни Риски. Используют Lock там, где есть рекурсивные захваты того же лока одним потоком, получая неочевидный дедлок; используют RLock «на всякий случай» ве
concurrencydeadlocks
MiddlePython Developer > Основы Python > Тестирование кода
Короткий ответ Модульные тесты проверяют отдельные компоненты по отдельности, в изоляции от остальной системы. Интеграционные тесты проверяют взаимодействие модулей между собой и корректность работы с внешними зависимостями, такими как база данных или API. Как это работает подробнее Эти виды тестирования отвечают на разные вопросы и выполняются на разных этапах. Изоляция. Unit-тест проверяет, корректно ли работает отдельная функция или класс сама по себе; при падении сразу видно, какой компонент сломался. Автор и скорость. Модульные тесты обычно пишет разработчик во время разработки, выполняются они быстро и считаются «белым ящиком». Интеграция. Интеграционные тесты ищут дефекты во взаимодействии собранных модулей и их стыках с окружением. Порядок и стоимость. Интеграционное тестирование идёт после модульного и до системного, но оно медленнее и дороже и чаще проводится тестировщиками. Что использовать на практике Пирамида тестов. Основу держи на быстрых модульных тестах, а интеграционные добавляй для критичны
integration-testspython
JuniorPython Developer > Основы Python > Внешние интеграции
Короткий ответ Polling — это когда ваш сервис сам периодически опрашивает внешний API, чтобы узнать об изменениях; webhook — это когда внешний сервис сам отправляет HTTP-запрос на ваш URL в момент события, без необходимости постоянно спрашивать. Как это работает подробнее при polling клиент шлёт запросы с интервалом (например, раз в минуту) и сравнивает состояние с предыдущим; при webhook сторонний сервис заранее настраивается на отправку POST-запроса на указанный URL при возникновении события (оплата прошла, статус изменился). Пример кода Что использовать на практике Рекомендация. webhook снижает задержку реакции на событие и нагрузку по сравнению с частым polling, но требует, чтобы ваш сервис был доступен из интернета по HTTPS и мог обработать повторную доставку одного и того же события (внешние сервисы обычно не гарантируют доставку ровно один раз). Polling проще реализовать и тестировать, но создаёт либо задержку, либо лишнюю нагрузку при частом опросе. Подводные камни Риски. не проверять подлинность вход
event-drivenintegrations
SeniorData Analyst > Метрики и эксперименты > A/B-тесты
Короткий ответ Единственно верного алгоритма действий нет: нужно сначала оценить, можно ли восстановить корректную оценку эффекта из доступных данных (например, пересчитать на основе менее затронутых метрик или логов), затем прозрачно сообщить стейкхолдерам о масштабе неопределённости, и параллельно решить бизнес-вопрос — стоит ли откатывать уже раскатанное изменение или проводить новый, корректный тест постфактум, взвешивая стоимость каждого варианта. Как это работает подробнее Как это работает: задвоение событий конверсии в одной из групп искусственно увеличивает наблюдаемую конверсию именно в затронутой группе, что могло задать ложно позитивный или завышенный эффект, на основании которого было принято решение о раскатке — важно понять, затронуло ли задвоение только логирование (метрика искажена, но продукт работал нормально) или и реальное поведение (например, баг действительно отправлял пользователю двойное действие). План действий: 1) зафиксировать период и масштаб бага (SQL-сравнение event_count по дням
ab-testingdata-quality
MiddleData Analyst > SQL и данные > Визуализация и BI
Короткий ответ Нужно последовательно проверить контекст фильтров, время обновления/кэширования, обработку часового пояса и логику джойнов/агрегации (размножение строк), а также различия в row-level security между моделью дашборда и сырым запросом. Как это работает подробнее Дашборды часто работают на извлечении или смоделированных данных (экстракт Tableau, Import mode в Power BI, LOD/меры), которые могут расходиться с прямым запросом к источнику из-за времени обновления, скрытых фильтров или размножения строк в джойнах. Пример кода Что использовать на практике Рекомендация. Проверьте: (1) работает ли дашборд на кэше/экстракте и когда было последнее обновление. Рекомендация. (2) есть ли скрытые фильтры/slicer'ы/RLS. Рекомендация. (3) совпадает ли часовой пояс границы «вчера» на дашборде и в SQL. Рекомендация. (4) не размножает ли модель данных строки через джойн факта с таблицей «один ко многим», раздувая SUM. Подводные камни Риск. Автоматическое предположение, что SQL-запрос — это «истина», без проверки совпа
data-validationpower-bi
MiddlePerformance Marketer > Google Ads > Трекинг и аналитика
Короткий ответ Рекламная платформа учитывает действия по собственным правилам и идентификаторам, а GA4 регистрирует доступные ему события сайта. Поэтому их показатели не обязаны совпадать. Как это работает подробнее Рекламная платформа засчитывает конверсию по собственным правилам, например клик плюс возможный показ в окне атрибуции 7 дней после клика и 1 день после показа, а GA4 — по своей сессии и собственной модели атрибуции на основе событий, зафиксированных именно тегом аналитики. Дополнительным фактором расхождения может быть разное определение самого клика — например, клик по карусели объявлений кабинет может считать как один клик, а GA4 — как несколько сессий при повторных заходах. Что использовать на практике Сверьте окно, модель и событие; проверьте теги, согласие, дубли и сравните итоговые оплаты с CRM за одинаковый период. Подводные камни Не объявляйте одну систему ошибочной лишь по расхождению: обе могут корректно измерять разные определения конверсии.
conversion-attributioncookie-consent
MiddlePerformance Marketer > Google Ads > Трекинг и аналитика
Короткий ответ Лиды могут дублироваться, теряться на вебхуке или появляться в CRM из звонков и ручного ввода. Отчёты также расходятся из-за задержек обработки. Как это работает подробнее Между событием на сайте (отправкой формы) и записью в CRM есть интеграция — вебхук, API или ручной ввод — на которой могут теряться или дублироваться записи; также в CRM вручную создают лиды без прохождения формы на сайте, например по звонкам или повторным обращениям. Расхождение также может возникать из-за задержки между моментом лида и моментом его обработки менеджером в CRM, особенно если заявки поступают ночью или в выходные и обрабатываются только в рабочие часы. Что использовать на практике Сверяйте уникальные идентификаторы и timestamp на каждом этапе, проверяйте логи интеграции и учитывайте дубли, повторные обращения и офлайн-лиды. Подводные камни Сравнение только агрегированных итогов не показывает место потери; нельзя использовать GA4 как доказательство факта сделки без подтверждения CRM.
crmdata-quality
JuniorPython Developer > Основы Python > Надёжность сервисов
Короткий ответ В коде отсутствует обработка ошибок внешнего вызова — при любом сбое (таймаут, 500, сетевая ошибка) необработанное исключение приведёт к падению обработчика с generic 500 Internal Server Error. Как это работает подробнее Исключение из httpx.get (например ConnectError, TimeoutException) не перехвачено, значит оно «всплывёт» до обработчика фреймворка, который вернёт generic 500. Пример кода Что использовать на практике Практика. Нужно явно перехватывать ожидаемые сетевые ошибки и возвращать осмысленный ответ клиенту (502/503) либо fallback-значение; также логировать причину сбоя для диагностики. Подводные камни Риск. Перехватывать Exception целиком без разбора и «проглатывать» ошибку молча; не задавать таймаут вообще, усиливая проблему.
fault-tolerancereliability
JuniorPython Developer > Основы Python > Надёжность сервисов
Короткий ответ В функции отсутствует таймаут при сетевом вызове, из-за чего при зависании внешнего сервиса вызывающий поток будет ждать неограниченно долго, что может исчерпать пул воркеров приложения под нагрузкой. Как это работает подробнее Без указания timeout библиотека использует либо бесконечное ожидание, либо системное значение по умолчанию, которое может быть очень большим. Пример кода Что использовать на практике Практика. Нужно всегда задавать явный таймаут для любого сетевого вызова (HTTP, БД, очередь), исходя из допустимой задержки для вызывающей стороны. Подводные камни Риск. Добавлять таймаут только на уровне всего запроса (таймаут веб-сервера), а не на уровне конкретного исходящего вызова — зависший вызов всё равно держит воркер занятым.
fault-tolerancereliability
JuniorPerformance Marketer > Google Ads > Данные, комплаенс и безопасность рекламных аккаунтов
Короткий ответ В общем случае 152-ФЗ требует, чтобы при сборе персональных данных граждан РФ запись, систематизация, накопление и первичное хранение выполнялись с использованием баз данных на территории России. Как это работает подробнее Требование влияет на выбор CRM, форм лидогенерации и хранилищ контактов. Возможность последующей передачи данных не отменяет необходимости разобраться с правилами первичного хранения. Применимость зависит от ситуации. Юристы должны оценить бизнес, аудиторию, тип данных и используемую связку систем. Что использовать на практике Проверьте путь данных. До запуска формы или интеграции выясните, где хранятся первичные записи и соответствует ли этот маршрут применимым требованиям. Подводные камни Не считайте локализацию формальностью. Зарубежный SaaS для контактов может не подходить, если применимые требования к первичному хранению не обеспечены.
152-fzcrm