Changed
- Simplified lock mechanism: now uses a single lock file instead of a lock directory
- Lock file contains just the PID (no nested directory structure)
- Uses atomic
O_CREAT | O_EXCLfor race-free lock acquisition - Simpler cleanup: just
os.remove()instead ofshutil.rmtree() - Backward compatible: automatically cleans up old directory-based locks from v3.6.5-v3.6.6