Python多进程共享内存中的嵌套目录名 - 无效参数

0 投票
1 回答
25 浏览
提问于 2025-04-12 20:40

看起来共享内存(SharedMemory)只支持简单的名字,大家知道为什么吗?或者有没有相关的资料可以参考?我在网上找了很久,但没找到相关的信息。

from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(name='test_dir/test_name', size=16, create=True)

得到的结果是

无效的参数: '/test_dir/test_name'

1 个回答

1

在macOS上这不是个问题,可能在任何Unix类型的平台上也不会有问题。最好是完全不使用名字。你可以在创建这个段后获取生成的名字。

你是在用Windows吗?我猜Windows会根据名字创建一个文件,如果是这样的话,你可以想象为什么目录分隔符会造成问题。

我认为,最好让共享内存段的引用(它的名字)由系统自动生成。然后你可以获取这个生成的名字,并把它传递给你代码的其他部分(或者其他进程),这样它们就可以连接到你创建的段。

下面是一个相对复杂的“你好,世界”程序,用来演示这个策略:

from multiprocessing.shared_memory import SharedMemory

def write_to_shared_memory(name: str, data: bytes) -> None:
    try:
        shm = SharedMemory(name) # attach to existing shared memory segment
        size = len(data)
        shm.buf[:size] = data
    finally:
        shm.close()

if __name__ == "__main__":
    try:
        data = b"Hello world!"
        shm = SharedMemory(size=len(data), create=True) # create the shared memory segment
        # emulate some other process that attaches to the shared memory segment by name
        write_to_shared_memory(shm.name, data)
        print(bytes(shm.buf).decode())
    finally:
        shm.close()
        shm.unlink()

撰写回答