"""`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()