Create Context Manager
syntactic sugar.
Recipes
from contextlib import contextmanager
@contextmanager
def managed_resource(*args, **kwds):
# Code to acquire resource, e.g.:
resource = acquire_resource(*args, **kwds)
try:
yield resource
finally:
# Code to release resource, e.g.:
release_resource(resource)
simplified:
class managed_resource:
def __init__(self, *args, **kwds):
self.resource = None
self.args = args
self.kwds = kwds
def __enter__(self):
self.resource = acquire_resource(*self.args, **self.kwds)
def __exit__(self, exc_type, exc_value, traceback) -> bool:
release_resource(self.resource)
return False
Usage
with managed_resource(timeout=3600) as resource:
pass