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

Иногда моё Flask приложение зависает на следующей строке:

with shelve.open('user_db') as db:

(это происходит случайно)
Весь код приложения привести не могу (очень большой), но в общем это выглядит так:

@app.route('/', methods=['POST'])
def mpage():
    Обработка запроса
    Запуск следующего метода (set_timer) в потоке
    Возвращение кода 200
 
def set_timer():
    Запускается таймер, запускается отдельный процесс (см следующий метод) и проверяется время выполнения этого процесса
 
def seps():
    Тут почти в самом начале лежит проблемная строка

Приложение зависает именно на этой строке, я это выяснил путём отладочных сообщений. Кто-нибудь может подсказать, в чём проблема?

UPD: заменил shelve на sqlite3. Открываю ее в глобальную переменную так:

conn = sqlite3.connect('user_db.db', check_same_thread=False)

Зависает здесь:

db = conn.cursor()
user_mode = db.execute('SELECT id, mode FROM users WHERE id={}'.format(user_id)).fetchall()

Не могу понять в чём проблема теперь

upd2:
Полностью перешёл на flask_sqlalchemy. Ошибка не пропала. Код:
Модель базы:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///./user.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
 
 
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    mode = db.Column(db.Integer, primary_key=False)

Как пользуюсь:

report += 'Открытие БД\n'
    t_user = User.query.get(user_id)
    if not t_user:
        user = User(id=user_id, mode=0)
        db.session.add(user)
        db.session.commit()
        t_user = User.query.get(user_id)
    user_mode = t_user.mode

И где-то в этих строках зависает. Что делать — не знаю


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