Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+921новая вакансия за сутки·58 907вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 867
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 394 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 813
  • Облачные технологии6 898
  • QA вакансии2 239
  • Android1 398
  • Инженер данных922
  • Продакт-менеджер346

Разработка

  • iOS1 305
  • Backend вакансии1 280
  • AI вакансии569
  • Fullstack вакансии543
  • Frontend вакансии450
  • Mobile вакансии27

По стеку

  • Go5 484
  • Java3 453
  • Node.js1 146
  • Kotlin1 133
  • Rust883
  • .NET837
  • PHP383
  • C++265
  • C#261

DevOps и инфраструктура

  • Kubernetes3 893
  • Linux-инфраструктура3 013
  • DevOps вакансии2 970
  • Terraform / IaC2 240
  • CI/CD1 066
  • Мониторинг и Observability1 051
  • SRE304
  • Кибербезопасность52

Аналитика и данные

  • Аналитик данных542
  • Data Scientist482
  • Бизнес-аналитик455
  • Системный аналитик60

Другие направления

  • Проджект-менеджер126
  • UI/UX дизайн74
  • Ручное тестирование14

По регионам

  • Вакансии в США27 007
  • Вакансии в Европе10 890
  • Работа в России3 242
  • Вакансии в Канаде2 370

По формату

  • Удалённые вакансии44 577
  • Релокация в США30 650
  • Гибридная работа7 410
  • Офисная работа5 407

По уровню

  • Senior вакансии26 826
  • Middle вакансии12 754
  • Junior вакансии4 519

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise134 вакансии
  • Celonis30 вакансий
  • Infobip28 вакансий
  • Spotify24 вакансии
  • Adyen19 вакансий
  • Darktrace17 вакансий
  • Monzo13 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PythonВсе вопросы
PythonJuniorLive-кодинг

Как написать свой context manager через класс?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Опишите класс с методами __enter__ (возвращает ресурс) и __exit__(exc_type, exc, tb) (освобождает ресурс). __exit__ возвращает False/None, чтобы исключение пробросилось дальше; True подавляет.

Пример: таймер с замером времени

from time import perf_counter


class Timer:
    def __init__(self, label: str = "block"):
        self.label = label
        self.elapsed: float = 0.0

    def __enter__(self) -> "Timer":
        self._start = perf_counter()
        return self

    def __exit__(self, exc_type, exc, tb) -> bool:
        self.elapsed = perf_counter() - self._start
        print(f"[{self.label}] took {self.elapsed:.4f}s "
              f"(exc={exc_type.__name__ if exc_type else None})")
        return False  # не подавляем исключение


with Timer("hash") as t:
    sum(i * i for i in range(1_000_000))

print(t.elapsed)

Протокол

Context manager — это объект с двумя дандер-методами:

  • __enter__(self) — вызывается на входе в with. Возвращаемое значение биндится к переменной после as.
  • __exit__(self, exc_type, exc, tb) — вызывается всегда: и на нормальном выходе, и при исключении. Если возвращает truthy (True), исключение подавляется; False/None — пробрасывается дальше.

Если ресурс уже создан и нужно только распарсить enter/exit — короче через @contextlib.contextmanager. Класс предпочтительнее, когда у ресурса есть состояние, несколько методов или сложный lifecycle (например, сессия БД, файловый lock, span трассировки).

Пример: транзакция с rollback при ошибке

class Transaction:
    def __init__(self, conn):
        self.conn = conn

    def __enter__(self):
        self.conn.execute("BEGIN")
        return self.conn

    def __exit__(self, exc_type, exc, tb):
        if exc_type is None:
            self.conn.execute("COMMIT")
        else:
            self.conn.execute("ROLLBACK")
        return False  # пробрасываем ошибку наружу

Async-вариант

Для async-ресурсов реализуйте __aenter__ и __aexit__ и используйте async with. Сигнатуры те же, но методы — корутины.

Подводные камни

  • Случайно вернуть truthy из __exit__ (например, забыть return False и вернуть результат логирования) — исключения молча проглатываются.
  • Освобождение в __exit__ само бросает исключение — оно перекроет оригинальное; оборачивайте cleanup в try/except или используйте contextlib.ExitStack.
  • Ошибка внутри __enter__ после частичного захвата ресурса: __exit__ не вызывается, нужен ручной cleanup в except.
  • Делать __enter__ неидемпотентным и пытаться вложить with одного и того же экземпляра — состояние перезапишется.
  • Использовать класс там, где хватило бы @contextlib.contextmanager + generator — лишний boilerplate.

Частые вопросы на собеседовании

  • Что такое truthy и falsy значения в Python?
  • Когда использовать threading?
  • Что такое type hints и зачем они нужны?
  • Как работает yield?

Типичные ошибки

  • Реализовать только enter.
  • Писать cleanup после блока вместо exit.
  • Возвращать True без причины.

Что проверяет интервьюер

  • Код запускается через with.
  • Исключения не проглатываются.
  • Cleanup находится в exit.

Как вы знаете этот вопрос?

Проверить себя по теме Python →

Источники

  • https://docs.python.org/3/reference/datamodel.html
  • https://docs.python.org/3/library/contextlib.html

Связанные темы

Pythonoopresource-management