Python: Как создать менеджер контекста для безопасного одновременного входа, который отличается в каждом контексте

Я хочу иметь объект conManager это экземпляр диспетчера контекста с повторным входом, так что всякий раз, когда я вхожу и выхожу из его контекста, он печатает число, но число должно быть на единицу больше, чем номер предыдущего контекста (начиная с 0).

Пример:

with conManager:
    print("Afirst")
    with conManager:
        print("Asecond")
        with conManager:
            print("third")
        print("Bsecond")
    print("Bfirst")

Ожидаемый выход:

0
Afirst
1
Asecond
2
third
2
Bsecond
1
Bfirst
0

Единственное решение, которое у меня есть, - это класс со стеком, но он не безопасен одновременно. Есть ли одновременно безопасные решения?

РЕДАКТИРОВАТЬ: как указал Сроу, я сказал, что потокобезопасный, когда я имел в виду одновременную безопасность, изменил вопрос соответственно.

1 ответ

Единственное решение, которое я могу придумать, это переопределение conManager__call__, так что он возвращает менеджер контекста, но я бы предпочел более чистое использование без вызова.

Другие вопросы по тегам