Найти - Пользователи
Полная версия: многопоточное приложение и sqlite
Начало » Python для новичков » многопоточное приложение и sqlite
1
Игнат
изначально я сделал так:

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

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

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

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

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

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

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

from threading import Lock
lock = Lock()

with lock:
cursor.execute('update ...')
o7412369815963
Зачем это все? Что за приложение?

Игнат
но оказалось что нельзя создать объект в одном классе и использовать в другом
кстати почему? я тоже встречал такую проблему.
Lexander
o7412369815963
кстати почему? я тоже встречал такую проблему.
http://www.sqlite.org/faq.html#q6
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB