Shared Memory Lock
A multiprocessing lock implemented using shared memory and atomics.
Installation
uv pip install -e .
Usage
from shared_memory_lock import SharedMemoryLock
# Create a lock (first process)
lock = SharedMemoryLock(name="my_lock", create=True, run_id="app1")
# Connect to the same lock (other processes)
lock = SharedMemoryLock(name="my_lock", create=False, run_id="app1")
# Use as context manager
with lock:
# Critical section - only one process can be here
print("Doing important work...")
# Or manual acquire/release
if lock.acquire(blocking=False):
try:
# Got the lock
print("Acquired lock!")
finally:
lock.release()
else:
print("Could not acquire lock")
# Clean up when done
lock.close()
lock.unlink() # Only call from one process
Features
- Cross-process synchronization: Works across multiple processes
- Atomic operations: Uses real atomic compare-and-swap for mutual exclusion
- Picklable: Can be passed to multiprocessing.Process
- Context manager: Supports
withstatements - Non-blocking: Optional non-blocking acquire with timeout
Development
# Install dependencies
uv sync
# Run tests
uv run --python 3.13.7 pytest
# Run tests with coverage
uv run --python 3.13.7 pytest --cov=shared_memory_lock
License
MIT
Metadata
Release files for shared_memory_lock 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| shared_memory_lock-0.1.5.tar.gz | 10.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shared_memory_lock-0.1.5-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.4 kB