class StubContextManager(object):

    def __init__(self, name):
        self.__name = name

def __repr__(self):
    return '%s(%r)' % (type(self).__name__, self.__name)

def __enter__(self):
    print('called %r.__enter__()' % self)

def __exit__(self, *args):
    print('called %r.__exit__%r' % (self, args))
with ContextPool() as pool:
    pool.enter(StubContextManager('foo'))
pool.enter(StubContextManager('bar'))
1 / 0
Открытие нескольких (неопределенного количества) файлов одновременно и обеспечение их правильного закрытия