0
0 комментариев

Здравствуйте!
Помогите, пожалуйста в проектировании приложения. Я программирую многопоточное приложение на Python3 (использую треды). В качестве ORM использую SQLAlchemy. В данном приложении несколько потоков подключаются к БД. Подключение к БД реализовано через одиночку. Одиночка в данной реализации представляет собой класс задекорированный следующим образом:

def singleton(cls):
    instance = {}
 
    def get_instance():
        if cls not in instance:
            instance[cls] = cls()
        return instance[cls]
    return get_instance()
 
@singleton
class Connector:
    def __init__(self):
        db = "параметры подключения"
        self.engine = create_engine(db)
        Session = sessionmaker(bind=self.engine)
        self.session = Session()
 
    def get_connection(self):    # вызывается когда нужен доступ к базе
        return self.session

Подскажите, пожалуйста, какие могут быть проблемы в данной реализации? Не возникнут ли блокировки при попытке воспользоваться методами класса Connect в разных потоках? (По идее наложение блокировки на экземпляр класса должен производить GIL).
На текущий момент у меня периодически в работе потоков появляется ошибка:

sqlalchemy.exc.ResourceClosedError: This Connection is closed


Добавить комментарий