Python进程退出时共享内存被隐式解除链接的原因及规避方法
Python共享内存泄漏警告及文件消失的原因与解决方法
原因分析
- Python的
multiprocessing.resource_tracker组件负责追踪共享内存等跨进程资源。当程序退出时,若共享内存对象未被显式关闭,资源追踪器会判定为资源泄漏,触发警告,同时自动执行清理操作——解除链接并删除共享内存文件。 - 你的测试代码仅创建了
SharedMemory实例,但未调用close()方法释放当前进程对共享内存的引用。进程退出时,Python的资源回收机制会处理未关闭的共享内存对象,导致文件被删除。
解决方法
- 显式关闭共享内存引用但保留文件:在程序结束前调用
shm.close(),该操作仅释放当前进程对共享内存的访问权限,不会删除底层的共享内存文件,同时能避免资源追踪器判定为泄漏。 - 修改后的代码示例:
#!/usr/bin/env python3.8 from multiprocessing import shared_memory from time import sleep PATH='/pth' if __name__ == '__main__': shm = shared_memory.SharedMemory(PATH) try: sleep(10) finally: shm.close() # 关闭当前进程的引用,保留共享内存文件
- 额外说明:如果需要让共享内存文件长期存在,绝对不要调用
shm.unlink()。只有当所有使用该共享内存的进程都已结束,且不再需要该文件时,才调用unlink()完成最终的资源清理。
内容的提问来源于stack exchange,提问作者Some Name
相关产品推荐
相关产品推荐

