Форум сайта python.su
0
Суть проблемы вот в чем:
Есть скрипт, который работает с файлом sqlite.
Если во время выполнения скрипта выполняется ф-ция update и происходит прервание выполнения скрипта, то при следующем обращении к файлу sqlite - он оказывается заблокированным.
Насколько я понимаю, происходит следующее:
1) Для произведения операций изменения происходит блокировка файла на изменение.
2) Т.к. происходит некорректное прерывание операции, то бд и остается заблокированной.
Если операция заканчивается корректно, то проблем с блокировкой не наблюдается
Вопросы:
1) Как отследить состояние бд (unlock,shared и т.д.)?
2) Как собственно разблокировать базу
PS использую python 2.7 + sqlalchemy + sqlite
Офлайн
0
Собственно сам и отвечу:
Решение этой задачи достаточно тривиальное.
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)
Офлайн
221
neitro
А как и почему происходит прерывание выполнения?
И еще вопрос - что за процессы используют базу ?
P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.
Отредактировано JOHN_16 (Июль 28, 2015 00:18:14)
Офлайн
0
JOHN_16
neitroА как и почему происходит прерывание выполнения? И еще вопрос - что за процессы используют базу ?P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.
Офлайн