Я получаю PermissionError: [Errno 13] Permission denied
при попытке разблокировать файл:
with open(fp, 'rb') as f:
fd = f.fileno()
size = os.path.getsize(fp)
msvcrt.locking(fd, msvcrt.LK_LOCK, size) # lock entire file
_ = f.read(4)
f.seek(0)
msvcrt.locking(fd, msvcrt.LK_UNLCK, size) # throws PermissionError
В соответствии с документами MSDN для _locking :
Вся блокировка или разблокировка начинается с текущей позиции указателя файла и продолжается для следующих байтов байтов. Можно заблокировать байты за концом файла.
Следовательно, f.seek(0)
после f.read(4)
. Однако это прекрасно работает:
with open(fp, 'rb') as f:
fd = f.fileno()
size = os.path.getsize(fp)
msvcrt.locking(fd, msvcrt.LK_LOCK, size) # lock entire file
msvcrt.locking(fd, msvcrt.LK_UNLCK, size)