python的进程间通讯--共享内存

2021年09月15日 阅读数:4
这篇文章主要向大家介绍python的进程间通讯--共享内存,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

最近看进程间通讯方式,恰好本身也在深刻学习python,看到python支持共享内存。因此写下这篇笔记。python

python中,有一个 multiprocessing.shared_memory.SharedMemory类,用来建立和访问共享内存。程序员

如下是一个例子:xcode

建立共享内存部分,咱们使用C代码,此处参考 大大飞鱼老哥的代码: https://blog.csdn.net/ababab12345/article/details/102931841ide

 1 #include <stdio.h>
 2 #include <sys/types.h>
 3 #include <sys/stat.h>
 4 #include <fcntl.h>
 5 #include <stdio.h>
 6 #include <sys/mman.h>
 7 #include <string.h>
 8 #include <errno.h>
 9 #include <unistd.h>
10 
11 #define MMAP_DATA_SIZE 1024
12 
13 int main(int argc,char * argv[])
14 {
15     char * data;
16     int fd = shm_open("/shm-file0001", O_CREAT|O_RDWR, 0777);
17     
18     if (fd < 0) {
19         printf("shm_open failed!\n");
20         return -1;
21     }
22     
23     ftruncate(fd, MMAP_DATA_SIZE);
24     
25     data = (char*)mmap(NULL, 1024, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
26     if (!data) {
27         printf("mmap failed\n");
28         close(fd);
29     }
30     
31     
32     sprintf(data,"This is a share memory! %d\n",fd);
33     
34     munmap(data,MMAP_DATA_SIZE);
35     
36     
37     close(fd);
38     getchar();
39     
40     shm_unlink("/shm-file0001");
41     
42     return 0;
43 }
View Code

 

经过xcode编译运行这段C代码:学习

 

 python代码部分咱们只写一个共享内存的读取:spa

1 from multiprocessing import shared_memory
2 
3 if __name__ == '__main__':
4     existing_shm = shared_memory.SharedMemory(name='shm-file0001')
5     content = existing_shm.buf.tobytes()
6     print(content)
7     existing_shm.close()

 

最终python部分代码运行结果:.net

 

进一步,class multiprocessing.managers.SharedMemoryManager提供了一种比较方便的管理共享内存的方式。由SharedMemoryManager返回的sharedMemory,在sharedMemoryManager的shutdown()方法被调用后,都会自动清理掉,不用程序员再额外费心了。3d

上一篇: python继承小记
下一篇: python模块导入