多进程数据共享
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 的协程级隔离