Към основното съдържание
🔒 Режим за преглед. Първите петнадесет урока на Foundations са безплатни; този е Pro. Стартирайте 7-дневен trial, за да отключите редактора, AI подсказките и останалата част от курса. Изисква се карта, отменете по всяко време в Dashboard.Стартирай 7-дневен trial →
← КурсовеSystem Design for Python JuniorsМодул 1 · Основи на системния дизайнПроектиране за провалpredict15 / 105
+100 XP
Задача
📝 **Задача:** Предскажете 7-редовата следа от низове на състоянието, излъчени от прекъсвача, докато преминава през 2 успешни, 3 неуспешни, 1 късо съединение и 1 сонда за възстановяване. 📋 Приложете функцията по-горе. Тестовете се изпълняват автоматично. 💡 **Съвет:** Прочетете отново теорията, ако се затрудните.
Предскажи изхода

Прочети кода внимателно

class CircuitBreaker:
    def __init__(self, threshold=3):
        self.state = "CLOSED"
        self.failures = 0
        self.threshold = threshold

    def call(self, fn):
        # OPEN — short-circuit, never call the real fn.
        if self.state == "OPEN":
            return "fallback"
        try:
            result = fn()
        except Exception:
            self.failures += 1
            if self.failures >= self.threshold:
                self.state = "OPEN"
            return "fallback"
        # Success path — only reset failure count from HALF_OPEN.
        if self.state == "HALF_OPEN":
            self.state = "CLOSED"
            self.failures = 0
        return result

    def half_open(self):
        # An external timer in a real CB would do this. We trigger
        # it manually so the prediction stays deterministic.
        self.state = "HALF_OPEN"


def ok():    return "ok"
def boom():  raise RuntimeError("dep down")

cb = CircuitBreaker(threshold=3)

cb.call(ok);   print(cb.state)        # CLOSED, success — state unchanged
cb.call(ok);   print(cb.state)        # CLOSED
cb.call(boom); print(cb.state)        # 1 fail → CLOSED still (under threshold)
cb.call(boom); print(cb.state)        # 2 fails → CLOSED
cb.call(boom); print(cb.state)        # 3 fails → OPEN (just tripped)
cb.call(ok);   print(cb.state)        # OPEN — short-circuited, real fn skipped
cb.half_open()
cb.call(ok);   print(cb.state)        # HALF_OPEN probe success → CLOSED

# What does this print? Type your prediction.

Какво ще изведе програмата? Напиши тук:

💬 Дискусия

Бъди първи — задай въпрос или сподели съвет.
Влез за да се присъединиш към дискусията. Четенето е безплатно.
Зареждане на дискусията…