Найти - Пользователи
Полная версия: Проблема с sqlite
Начало » Python для новичков » Проблема с sqlite
1
neitro
Суть проблемы вот в чем:
Есть скрипт, который работает с файлом sqlite.
Если во время выполнения скрипта выполняется ф-ция update и происходит прервание выполнения скрипта, то при следующем обращении к файлу sqlite - он оказывается заблокированным.

Насколько я понимаю, происходит следующее:
1) Для произведения операций изменения происходит блокировка файла на изменение.
2) Т.к. происходит некорректное прерывание операции, то бд и остается заблокированной.
Если операция заканчивается корректно, то проблем с блокировкой не наблюдается

Вопросы:
1) Как отследить состояние бд (unlock,shared и т.д.)?
2) Как собственно разблокировать базу

PS использую python 2.7 + sqlalchemy + sqlite
neitro
Собственно сам и отвечу:
Решение этой задачи достаточно тривиальное.
proc = subprocess.Popen('fuser /home/neitro/PycharmProjects/domains/test-data.db' ,shell=True, stdout=subprocess.PIPE)
out = proc.stdout.read()
#process_array =  filter(lambda i: i != '', out.split(" "))
process_array = [x for x in out.split(" ") if x!='' ]
for proc in process_array:
	subprocess.call('kill -9 %s' % proc, shell=True)
PS сделать нужно это до использования бд скриптом, а то оно и себя может закосить.
Тему можно закрывать
JOHN_16
neitro
А как и почему происходит прерывание выполнения?

И еще вопрос - что за процессы используют базу ?

P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.
neitro
JOHN_16
neitroА как и почему происходит прерывание выполнения? И еще вопрос - что за процессы используют базу ?P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.

Прерывание вызывал cron (т.е. за 24 часа программа не успевала обработать инфу и вот появлялась ситуация).
Сейчас разбираюсь почему такая ситуация возникла.
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