Получение ошибки Python SQL ошибка (builtins.RuntimeError) Второе одновременное чтение по файлу не обнаружено 27 - PullRequest
0 голосов
/ 21 апреля 2020

Я получаю эту ошибку (builtins.RuntimeError) Второе одновременное чтение по файлу 27 обнаружено. Я использую одноэлементный класс для построения соединения, сельдерей для задач, и есть API, который принимает project_id в качестве входных данных и удаляет строки из нескольких таблиц для этого конкретного проекта. Поскольку я использую сельдерей, когда есть два или более параллельных запроса, эта ошибка выскакивает


class DBConnector(object):

    def __init__(self, DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_IP, DATABASE_NAME):

        self.DATABASE_USERNAME = DATABASE_USERNAME
        self.DATABASE_PASSWORD = DATABASE_PASSWORD
        self.DATABASE_IP = DATABASE_IP
        self.DATABASE_NAME = DATABASE_NAME


    # creats new connection
    def create_connection(self):
        print("Creating connection")
        engine = create_engine("mysql+mysqlconnector://{0}:{1}@{2}/{3}".format(DATABASE_USERNAME, DATABASE_PASSWORD,
                                                                               DATABASE_IP, DATABASE_NAME),
                               pool_recycle=900, pool_size=5).connect()
        return engine

    # For explicitly opening database connection
    def __enter__(self):
        self.dbconn = self.create_connection()
        return self.dbconn

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.dbconn.close()

class DBConnection(object):
    connection = None

    @classmethod
    def get_connection(cls, new=False):
        if new or not cls.connection:
            cls.connection = DBConnector(DATABASE_USERNAME, DATABASE_PASSWORD, DATABASE_IP, DATABASE_NAME).create_connection()
        return cls.connection

    @classmethod
    def execute_query(cls, query):
        engine = cls.get_connection()
        try:
            res = engine.execute(query)
            return res

        except Exception as e:
            print(e)
            engine = cls.get_connection(new=True)  # Create new connection
            #cursor = engine.cursor()
            res = engine.execute(query)
            return res
...