Files
am-deduper/am_deduper/locking.py
T

19 lines
521 B
Python

from __future__ import annotations
from contextlib import contextmanager
from pathlib import Path
import fcntl
@contextmanager
def exclusive(db_path: Path):
"""Cross-process lock for destructive dedupe operations."""
lock_path = Path(str(db_path) + ".lock")
lock_path.parent.mkdir(parents=True, exist_ok=True)
with lock_path.open("w") as handle:
fcntl.flock(handle.fileno(), fcntl.LOCK_EX)
try:
yield
finally:
fcntl.flock(handle.fileno(), fcntl.LOCK_UN)