Managing a file is very important, particularly when multiple processes read and write to the same file. Using file locking we can prevent concurrent access to a file.
In this article, we will see how to lock a file using Python.
fcntl Module (Linux/Unix)
If you are using Linux/Unix, the fcntl
module provides the flock
function used to apply a lock to a file descriptor.
import fcntl
with open('myfile.txt', 'r+') as f:
# Apply an exclusive lock
fcntl.flock(f, fcntl.LOCK_EX)
# Perform file operations
# ...
# Release the lock
fcntl.flock(f, fcntl.LOCK_UN)
Here, LOCK_EX
is an exclusive lock, which means no other process can access the file while it’s locked. LOCK_UN
releases the lock.
msvcrt Module (Windows)
In Windows, we can use the msvcrt
module which provides locking through locking
function.
Following is the example:
import msvcrt
with open('myfile.txt', 'r+') as f:
# Lock the file
msvcrt.locking(f.fileno(), msvcrt.LK_LOCK, 10)
# Perform file operations
# ...
# Unlock the file
msvcrt.locking(f.fileno(), msvcrt.LK_UNLCK, 10)
If you want a portable solution across all the operating systems then we can the portalocker
library.
pip install portalocker
import portalocker
with open('myfile.txt', 'r+') as f:
# Lock the file
portalocker.lock(f, portalocker.LOCK_EX)
# Perform file operations
# The lock is automatically released on file close
In the above example, the open()
function is used to open the file and the file will be locked using the lock()
API of portalocker
.
The lock will be automatically released once the file is closed.