Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 11, 2009 11:26:03

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

Уважаемые господа!
На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?



Офлайн

#2 Авг. 11, 2009 11:44:58

.Serj.
От:
Зарегистрирован: 2008-09-27
Сообщения: 181
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла. Можно заглянуть в исходники portage (система управления пакетами Gentoo Linux), он как раз на питоне написан. Ну или в исходники любой другой системы управления пакетами.



Офлайн

#3 Авг. 11, 2009 11:51:00

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

.Serj.
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла.
Хотелось бы что либо более высокоуровневое, понятное для человека, неписавшего скрипт, вроде функции flock в php. Хотя за неимением лучшего и этот способ прокатит, спасибо



Отредактировано (Авг. 11, 2009 14:50:55)

Офлайн

#4 Авг. 11, 2009 12:01:46

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

.Serj.
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла.
Дополнительный вопрос. Как при такой схеме реализовать ожидание разблокировки файла другими копиями скрипта?



Офлайн

#5 Авг. 11, 2009 15:44:58

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Блокировка файла

Paher
Уважаемые господа!
На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?
Это подойдет? http://dinsdale.python.org/doc/2.5/lib/module-fcntl.html
Ожидание разблокировки в такой схеме реализуется тупо - пытаемся лочить, если уже залочено, то получаем исключение IOError.
Ждем, пытаемся опять.



Отредактировано (Авг. 11, 2009 21:44:04)

Офлайн

#6 Авг. 11, 2009 16:48:58

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

То, что надо, за исключением малости - блокировка должна работать и на никсах, и в винде. Хотя фраза “On some systems, this function is emulated using fcntl().” внушает некоторую надежду :-). Спасибо!

К сожалению такого модуля в винде не нашел… Его там нет или нет в стандартной библиотеке?



Отредактировано (Авг. 11, 2009 16:53:51)

Офлайн

#7 Авг. 11, 2009 21:52:26

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Блокировка файла

В вопросе вы не указывали, что вебсервер у вас на винде. Все, которые вокруг меня - на унихах :)
А в модуле так и написано: Availability: Unix, так что под винду его нет.

Это подойдет?: http://code.activestate.com/recipes/65203/



Офлайн

#8 Авг. 12, 2009 08:17:45

Paher
От:
Зарегистрирован: 2009-08-11
Сообщения: 66
Репутация: +  0  -
Профиль   Отправить e-mail  

Блокировка файла

подошло бы, но я не нашел модулей win32con, win32file, pywintypes. Я новичок в python, возможно, что-то не так делаю. ДА и вариант с lock-файлами мне показался менее громоздким. Буду его реализовывать. Спасибо всем за помощь



Офлайн

#9 Авг. 12, 2009 10:46:27

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Блокировка файла

Проблема с .lock файлами в том, что если ваш скрипт где-нибудь отвалится, а .lock файл останется, то остальные будут ждать вечно. В случае использования нормальных локов при завершении процесса система снимет лок сама.



Офлайн

#10 Авг. 12, 2009 10:51:34

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Блокировка файла

Paher
подошло бы, но я не нашел модулей win32con, win32file, pywintypes. Я новичок в python, возможно, что-то не так делаю.
В гугле вы тоже новичек :) ?
http://starship.python.net/crew/mhammond/



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version