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

+1 487новых вакансий за сутки·92 551вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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