Вы можете создать класс, который будет хранить состояние ресурсов и предоставлять к нему доступ через свойства или методы. Вам может потребоваться реализовать синглтон-паттерн, чтобы обеспечить, что экземпляр этого класса существует только в одном экземпляре на всем протяжении существования приложения. Также вам может потребоваться защитить состояние ресурсов от неправильного использования, реализовав некоторые методы для доступа к ресурсам.
В качестве примера:
from threading import Lock
class ResourceContainer:
_instance = None
_lock = Lock()
def __new__(cls):
with cls._lock:
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
def __init__(self):
self._db_connection = None
self._message_broker_connection = None
self._config = {}
def get_db_connection(self):
return self._db_connection
def set_db_connection(self, connection):
self._db_connection = connection
def get_message_broker_connection(self):
return self._message_broker_connection
def set_message_broker_connection(self, connection):
self._message_broker_connection = connection
def get_config(self):
return self._config
def set_config(self, config):
self._config = config
В этом примере создается класс ResourceContainer, который реализует синглтон-паттерн с помощью метода __new__ и мьютекса _lock. Он хранит состояние ресурсов (подключение к БД, подключение к брокеру сообщений, конфигурация) и предоставляет к ним доступ через методы get_* и set_*.
Другие модули или функции могут получить доступ к экземпляру ResourceContainer так:
def foo():
container = ResourceContainer()
db_conn = container.get_db_connection()
# use db_conn
def bar():
container = ResourceContainer()
config = container.get_config()
# use config
Обратите внимание, что каждый раз при вызове ResourceContainer() будет возвращаться один и тот же экземпляр, таким образом состояние ресурсов будет сохраняться на всем протяжении существования приложения.