Skip to main content

A Python locking library not depending on inter-process locking primitives in the OS

Project description

openlock

A locking library not depending on inter-process locking primitives in the OS.

Api

  • FileLock(lock_file, timeout=None). Constructor. The optional timeout argument is the default for the corresponding argument of acquire() (see below).
  • FileLock.acquire(timeout=None). Attempts to acquires the lock. The optional timeout argument specifies the maximum waiting time before a Timeout exception is thrown.
  • FileLock.release(). Releases the lock.
  • FileLock.locked(). Indicates if the lock is held by a process.
  • FileLock.getpid(). The PID of the process that holds the lock, if any. Otherwise returns None.

How does it work

A valid lock file has two lines of text containing respectively:

  • pid: the PID of the process holding the lock;
  • name: the content of argv[0] of the process holding the lock.

A lock file is considered stale if the pair (pid, name) does not belong to a process in the process table.

A process that seeks to acquire a lock first looks for an existing valid lock file. If there is no lock file, or if it is stale or unparsable, then the process atomically creates a new lock file with its own data. It then sleeps 0.5 seconds (configurable) and checks if the lock file has not been overwritten by a different process. If not then it has acquired the lock.

Issues

The algorithm fails if a process needs more than 0.5 seconds to create a new lock file after detecting the absence of a valid one.

History

This is a refactored version of the locking algorithm used by the worker for the Fishtest web application https://tests.stockfishchess.org/tests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openlock-1.0.3.tar.gz (5.7 kB view hashes)

Uploaded Source

Built Distribution

openlock-1.0.3-py3-none-any.whl (5.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page