问题域/PD-91

多进程数据共享

Multi-Process Data Sharing

在多进程(Gunicorn worker)环境下实现存储数据的安全共享与同步

子问题

1.跨进程锁管理

2.共享状态一致性

3.锁超时与清理

4.asyncio 事件循环与同步 Manager.Lock 的兼容

5.动态锁的内存泄漏与生命周期管理

6.多 key 加锁的死锁预防

7.协程取消时的锁安全释放

各项目的解法1 solutions

Signals

横向对比

维度LightRAG
共享机制multiprocessing.Manager 共享字典 + 代理锁,Gunicorn preload fork 继承
锁粒度三层:全局 internal_lock → 初始化 data_init_lock → 实体级 KeyedUnifiedLock
异步兼容UnifiedLock 双锁协议:asyncio.Lock 防事件循环阻塞 + Manager.Lock 跨进程互斥
锁清理策略引用计数 + 300s 超时 + 500 阈值批量清理 + 30s 最小间隔
死锁预防多 key 排序加锁 + asyncio.shield 保护释放 + 异常回滚
生命周期管理Gunicorn on_starting 初始化 → preload fork 继承 → on_exit finalize 释放

最佳实践

1.使用multiprocessing.Manager管理共享字典,KeyedLock实现命名空间级细粒度锁

2.Gunicorn preload_app=True 确保 fork 前完成 Manager 初始化

3.UnifiedLock 双锁协议:先 asyncio.Lock 再 Manager.Lock 防止事件循环阻塞

4.asyncio.shield 保护锁释放过程不被协程取消中断

5.ContextVar 实现 NamespaceLock 的协程级隔离