"""`Resource` provider example.""" import sys import logging from concurrent.futures import ThreadPoolExecutor from dependency_injector import containers, providers def init_thread_pool(max_workers: int): thread_pool = ThreadPoolExecutor(max_workers=max_workers) yield thread_pool thread_pool.shutdown(wait=True) class Container(containers.DeclarativeContainer): config = providers.Configuration() thread_pool = providers.Resource( init_thread_pool, max_workers=config.max_workers, ) logging = providers.Resource( logging.basicConfig, level=logging.INFO, stream=sys.stdout, ) if __name__ == "__main__": container = Container(config={"max_workers": 4}) container.init_resources() logging.info("Resources are initialized") thread_pool = container.thread_pool() thread_pool.map(print, range(10)) container.shutdown_resources()