@nedland

Многозадачность + sqlite3, как оно работает?

Доброго времени суток. Прошу совет, может разъяснений. Ситуация такая
Представьте, обычный тг бот (main.py) и к нему подключена sqlite3 база (db.db).
Бот это 2 кнопки, 1 кнопка "В ОЧЕРЕДЬ", вторая "ВЫЙТИ ИЗ ОЧЕРЕДИ". Соответственно на каждую кнопку асинхронная функция с self.cursor.execute в первой кнопке INSERT в таблицу ждущих очередь, во второй DELETE из очереди.
Решил немного нагрузить бота, +-10 человек начали нажимать кнопки и заметил, что-то вроде "проскакивания". То есть человек нажал в очередь, а в бд он не в ней. Что может быть, неужели рассинхрон идет :) запись на запись и т.п. Не могу понять, ведь если спокойно нажимать, все работает.
Надеюсь обьяснил нормально, спасибо!
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Во-первых, SQLite в принципе хреново работает в конкурентном окружении и не предназначена для существенных нагрузок. Во-вторых, независимо от СУБД при конкурентном доступе к БД нужно правильно использовать блокировки, а вы этого не делаете, возможно. Во-третьих, может у вас в коде между контекстами выполнения разделяется курсор или соединение, а они для этого не предназначены и могут порождать абсолютно хаотичное поведение или вовсе падать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы