2020-10-25 03:56:32 +03:00
|
|
|
"""`Resource` provider example."""
|
|
|
|
|
|
|
|
import sys
|
|
|
|
import logging
|
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
|
|
|
|
from dependency_injector import containers, providers
|
|
|
|
|
|
|
|
|
2020-10-26 20:39:13 +03:00
|
|
|
def init_thread_pool(max_workers: int):
|
2020-10-25 03:56:32 +03:00
|
|
|
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(
|
2020-10-26 20:39:13 +03:00
|
|
|
init_thread_pool,
|
2020-10-25 03:56:32 +03:00
|
|
|
max_workers=config.max_workers,
|
|
|
|
)
|
|
|
|
|
|
|
|
logging = providers.Resource(
|
|
|
|
logging.basicConfig,
|
|
|
|
level=logging.INFO,
|
|
|
|
stream=sys.stdout,
|
|
|
|
)
|
|
|
|
|
|
|
|
|
2021-09-30 22:03:19 +03:00
|
|
|
if __name__ == "__main__":
|
|
|
|
container = Container(config={"max_workers": 4})
|
2020-10-25 03:56:32 +03:00
|
|
|
|
|
|
|
container.init_resources()
|
|
|
|
|
2021-09-30 22:03:19 +03:00
|
|
|
logging.info("Resources are initialized")
|
2020-10-25 03:56:32 +03:00
|
|
|
thread_pool = container.thread_pool()
|
|
|
|
thread_pool.map(print, range(10))
|
|
|
|
|
|
|
|
container.shutdown_resources()
|