Python进程间共享内存(版本3.8+)

使用multiprocessing.shared_memory,Python版本要求3.8+,Windows和Linnux都适用,其原型如下,

# name: 共享内存名字,为None时会自动生成一个名字
# create: 是否创建共享内存,True则创建,False则使用已经存在的共享内存
# size: 希望创建的共享内存大小,create为True时有效(单位:byte)
class multiprocessing.shared_memory.SharedMemory(name=None, create=False, size=0)

进程间通过共享内存的名字来进行交互或者通信。


例子

进程A创建共享内存,名称为shmTest555666

from multiprocessing import shared_memory


shm = shared_memory.SharedMemory(name='shmTest555666', create=True, size=10)

buf = shm.buf
print('Process A, buf len: {}, {}'.format(len(buf), shm.size))
print('shm name: {}'.format(shm.name))

buf[:4] = bytearray([22, 33, 44, 55])
buf[4] = 100


while True:
    if buf[4] == 200: # 当buf[4]变成200,就结束循环
        break


shm.close() # 关闭共享内存
shm.unlink() # 释放共享内存,也可以由B进程释放

进程B使用A创建的共享内存,通过名字shmTest555666就可以找到A的共享内存,并进行修改,

from multiprocessing import shared_memory


shm = shared_memory.SharedMemory(name='shmTest555666')
buf = shm.buf
print('Process B, buf len: {}, {}'.format(len(buf), shm.size))
print('shm name: {}'.format(shm.name))

for i in range(10):
    print('{} '.format(buf[i]), end='')

buf[4] = 200

print('')

本人在win10 64位系统下进行测试的,B进程得到的共享内存大小是4096,是一个内存页的大小,由此可见,操作系统分配内存的最小单位是4096字节,如下,
在这里插入图片描述


小结

multiprocessing.shared_memory对于进程间共享内存来说很方便,不过要求python版本是3.8及以上,使用时需要注意自己的python版本。
PS:这些Linux C早就有了…

猜你喜欢

转载自blog.csdn.net/whahu1989/article/details/109753804