Найти - Пользователи
Полная версия: Блокировка файла
Начало » Python для новичков » Блокировка файла
1 2
Paher
Уважаемые господа!
На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?
.Serj.
На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла. Можно заглянуть в исходники portage (система управления пакетами Gentoo Linux), он как раз на питоне написан. Ну или в исходники любой другой системы управления пакетами.
Paher
.Serj.
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла.
Хотелось бы что либо более высокоуровневое, понятное для человека, неписавшего скрипт, вроде функции flock в php. Хотя за неимением лучшего и этот способ прокатит, спасибо
Paher
.Serj.
Создать lock-file. Технически представляет собой пустой файл с именем, скажем, .log_file.lock. При запуске скрипта проверять наличие этого файла.
Дополнительный вопрос. Как при такой схеме реализовать ожидание разблокировки файла другими копиями скрипта?
Ed
Paher
Уважаемые господа!
На веб-сервере работает скрипт, который пишет данные в лог. Подскажите, как в этом скрипте заблокировать лог так, чтобы другие копии скрипта не имели возможности записи в него, а ждали, пока данный скрипт не закончит работу с ним?
Это подойдет? http://dinsdale.python.org/doc/2.5/lib/module-fcntl.html
Ожидание разблокировки в такой схеме реализуется тупо - пытаемся лочить, если уже залочено, то получаем исключение IOError.
Ждем, пытаемся опять.
Paher
То, что надо, за исключением малости - блокировка должна работать и на никсах, и в винде. Хотя фраза “On some systems, this function is emulated using fcntl().” внушает некоторую надежду :-). Спасибо!

К сожалению такого модуля в винде не нашел… Его там нет или нет в стандартной библиотеке?
Ed
В вопросе вы не указывали, что вебсервер у вас на винде. Все, которые вокруг меня - на унихах :)
А в модуле так и написано: Availability: Unix, так что под винду его нет.

Это подойдет?: http://code.activestate.com/recipes/65203/
Paher
подошло бы, но я не нашел модулей win32con, win32file, pywintypes. Я новичок в python, возможно, что-то не так делаю. ДА и вариант с lock-файлами мне показался менее громоздким. Буду его реализовывать. Спасибо всем за помощь
Ed
Проблема с .lock файлами в том, что если ваш скрипт где-нибудь отвалится, а .lock файл останется, то остальные будут ждать вечно. В случае использования нормальных локов при завершении процесса система снимет лок сама.
Ed
Paher
подошло бы, но я не нашел модулей win32con, win32file, pywintypes. Я новичок в python, возможно, что-то не так делаю.
В гугле вы тоже новичек :) ?
http://starship.python.net/crew/mhammond/
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