python的进程间通信--共享内存
2021/4/9 7:25:14
本文主要是介绍python的进程间通信--共享内存,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
最近看进程间通信方式,刚好自己也在深入学习python,看到python支持共享内存。所以写下这篇笔记。
python中,有一个 multiprocessing.shared_memory.SharedMemory类,用来创建和访问共享内存。
以下是一个例子:
创建共享内存部分,我们使用C代码,此处参考 大大飞鱼老哥的代码: https://blog.csdn.net/ababab12345/article/details/102931841
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代码部分我们只写一个共享内存的读取:
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部分代码运行结果:
进一步,class multiprocessing.managers.SharedMemoryManager提供了一种比较方便的管理共享内存的方式。由SharedMemoryManager返回的sharedMemory,在sharedMemoryManager的shutdown()方法被调用后,都会自动清理掉,不用程序员再额外费心了。
这篇关于python的进程间通信--共享内存的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python