Python多进程SharedMemory用嵌套目录名称报错:无效参数
问题说明
执行以下代码:
from multiprocessing import shared_memory shm = shared_memory.SharedMemory(name='test_dir/test_name', size=16, create=True)
会触发报错:无效参数: '/test_dir/test_name'
不支持带路径名称的核心原因
- 底层系统接口限制:Python的
SharedMemory依赖系统原生的共享内存机制(Linux下是shm_open,Windows下是文件映射API),这些系统接口本身不允许名称中包含路径分隔符(如/)。以Linux的shm_open为例,共享内存对象的命名规则是必须以单个/开头,但不能包含其他/,否则直接返回无效参数错误。 - 命名空间设计逻辑:系统级共享内存的命名空间是扁平的,本质是全局唯一的标识,而非文件系统路径结构。保持扁平命名能简化跨进程的内存块查找逻辑,避免引入文件系统权限、路径存在性等额外复杂度。
参考依据
- CPython源码实现:
SharedMemory创建时会直接将名称传递给os.shm_open,而os.shm_open的行为完全遵循系统接口规范,不接受带路径的名称。 - 系统手册:比如Linux的
shm_open(3)手册明确规定,共享内存对象名称若包含多个/会触发EINVAL错误,与实际报错一致。
内容的提问来源于stack exchange,提问作者moon548834
相关产品推荐
相关产品推荐

