Уведомления

Группа в Telegram: @pythonsu

#1 Июль 27, 2015 10:18:44

neitro
Зарегистрирован: 2015-03-13
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с sqlite

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

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

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

PS использую python 2.7 + sqlalchemy + sqlite

Офлайн

#2 Июль 27, 2015 23:48:28

neitro
Зарегистрирован: 2015-03-13
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с sqlite

Собственно сам и отвечу:
Решение этой задачи достаточно тривиальное.

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 сделать нужно это до использования бд скриптом, а то оно и себя может закосить.
Тему можно закрывать

Офлайн

#3 Июль 28, 2015 00:09:44

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проблема с sqlite

neitro
А как и почему происходит прерывание выполнения?

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

P.S. вы не решили проблему. вы сделали костыль. Конечно это будет работать…но костыль все же.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Отредактировано JOHN_16 (Июль 28, 2015 00:18:14)

Офлайн

#4 Июль 29, 2015 11:40:07

neitro
Зарегистрирован: 2015-03-13
Сообщения: 25
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с sqlite

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

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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version