Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 19, 2011 14:23:22

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточное приложение и sqlite

изначально я сделал так:

создаем класс Sqlite, который подключается к БД
все потоки обращаются к этому классу и пишут/читают в БД

но оказалось что нельзя создать объект в одном классе и использовать в другом
поэтому я стал создавать объект внутри потока

соответственно каждый поток подключается к БД и пишет в неё

при невысокой интенсивности чтения/записи все было нормально, но когда потоки стали постоянно коммитить изменения в БД - стал вылезать эксепшен “sqlite3.OperationalError: database is locked”

погуглил, советуют для каждой операции вызывающей cursor.execute() - подключаться отдельно и после выполнения освобождать курсор cursor.close()

попробовал - в результате скрипт сожрал 100% проца, постоянно подключаясь к БД и когда я попытался убить потоки - также вылезли эксепшены “sqlite3.OperationalError: database is locked”

подскажите, как делать правильно?
как в питоне ставить локи на время обращения к курсору, чтобы другие потоки смиренно ждали?



Офлайн

#2 Июнь 19, 2011 14:46:48

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

многопоточное приложение и sqlite

сорри за поспешность
таки нашел отличное решение, в духе py3k:

from threading import Lock
lock = Lock()

with lock:
cursor.execute('update ...')



Офлайн

#3 Июнь 19, 2011 15:37:19

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

многопоточное приложение и sqlite

Зачем это все? Что за приложение?

Игнат
но оказалось что нельзя создать объект в одном классе и использовать в другом
кстати почему? я тоже встречал такую проблему.

Офлайн

#4 Июнь 20, 2011 10:42:58

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

многопоточное приложение и sqlite

o7412369815963
кстати почему? я тоже встречал такую проблему.
http://www.sqlite.org/faq.html#q6



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version