У меня есть приложение Python, работающее в Linux. Он вызывается каждую минуту от cron. Он проверяет каталог на наличие файлов и, если он находит, обрабатывает его - это может занять несколько минут. Я не хочу, чтобы следующее задание cron забирало файл, обрабатываемый в данный момент, поэтому я блокирую его, используя приведенный ниже код, который вызывает portalocker. Проблема в том, что это не работает. Следующему заданию cron удается получить дескриптор файла, возвращенный для файла, все готово к обработке.
def open_and_lock(full_filename):
file_handle = open(full_filename, 'r')
try:
portalocker.lock(file_handle, portalocker.LOCK_EX
| portalocker.LOCK_NB)
return file_handle
except IOError:
sys.exit(-1)
Есть идеи, что я могу сделать, чтобы заблокировать файл, чтобы никакой другой процесс не смог его получить?
UPDATE
Благодаря @Winston Ewert я проверил код и обнаружил, что дескриптор файла закрывался до завершения обработки. Похоже, что теперь он работает, за исключением блоков второго процесса в portalocker.lock, а не выдает исключение.