neitro
Июль 27, 2015 10:18:44
Суть проблемы вот в чем:
Есть скрипт, который работает с файлом sqlite.
Если во время выполнения скрипта выполняется ф-ция update и происходит прервание выполнения скрипта, то при следующем обращении к файлу sqlite - он оказывается заблокированным.
Насколько я понимаю, происходит следующее:
1) Для произведения операций изменения происходит блокировка файла на изменение.
2) Т.к. происходит некорректное прерывание операции, то бд и остается заблокированной.
Если операция заканчивается корректно, то проблем с блокировкой не наблюдается
Вопросы:
1) Как отследить состояние бд (unlock,shared и т.д.)?
2) Как собственно разблокировать базу
PS использую python 2.7 + sqlalchemy + sqlite
neitro
Июль 27, 2015 23:48:28
Собственно сам и отвечу:
Решение этой задачи достаточно тривиальное.
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
Июль 28, 2015 00:09:44
neitro
А как и почему происходит прерывание выполнения?
И еще вопрос - что за процессы используют базу ?
P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.
neitro
Июль 29, 2015 11:40:07
JOHN_16
neitroА как и почему происходит прерывание выполнения? И еще вопрос - что за процессы используют базу ?P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.
Прерывание вызывал cron (т.е. за 24 часа программа не успевала обработать инфу и вот появлялась ситуация).
Сейчас разбираюсь почему такая ситуация возникла.