SharedMemory 似乎只支持平面名称,有谁知道为什么或有任何参考吗?我在网上找了好久都没找到亲人..
from multiprocessing import shared_memory
shm = shared_memory.SharedMemory(name='test_dir/test_name', size=16, create=True)
得到了
无效参数:'/test_dir/test_name'
这在 macOS 上不是问题,在任何 Unix 类型平台上可能也不是问题。最好根本不使用名称。您可以从 shm.name 获取生成的名称 您使用的是 Windows 吗?作为猜测,Windows 根据名称创建一个文件,如果是这种情况,您可以想象为什么目录分隔符可能会导致问题。
(在我看来)更好的是允许为您生成共享内存段引用(其名称)。然后,您可以获取生成的名称并将其传递给想要附加到您创建的段的代码的其他部分(或者实际上是其他进程)。
这里有一个相当复杂的“Hello world”程序来演示这一策略:
from multiprocessing.shared_memory import SharedMemory
from io import BytesIO
def write_to_shared_memory(name: str, data: BytesIO) -> None:
try:
shm = SharedMemory(name) # attach to existing shared memory segment
size = data.getbuffer().nbytes
shm.buf[:size] = data.getbuffer()
finally:
shm.close()
if __name__ == "__main__":
try:
data = BytesIO(b"Hello world!")
size = data.getbuffer().nbytes
shm = SharedMemory(size=size, create=True) # create the shared memory segment without specifying a name
# 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()