Python多进程共享内存中的嵌套目录名 - 无效参数
看起来共享内存(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()