在多进程编程中,Python共享内存是一种高效的进程间通信方式。它允许多个进程直接访问同一块物理内存区域,避免了数据复制带来的性能开销。本教程将从零开始,手把手教你如何使用 Python 的 multiprocessing 模块实现共享内存,即使你是编程新手也能轻松上手!

共享内存是指多个进程可以同时读写同一块内存区域。相比队列(Queue)或管道(Pipe),它速度更快、效率更高,特别适合需要频繁交换大量数据的场景。
在 Python 中,multiprocessing 模块提供了两种主要的共享内存方式:
multiprocessing.Value 和 multiprocessing.Array:适用于简单数据类型(如整数、浮点数、字符数组)multiprocessing.shared_memory(Python 3.8+):更灵活,支持任意可序列化对象这是最基础的方式,适合共享单个值或一维数组。
import multiprocessingimport timedef worker(num): for i in range(5): num.value += 1 print(f"子进程 {multiprocessing.current_process().name}: num = {num.value}") time.sleep(0.1)if __name__ == "__main__": # 创建一个共享的整数,初始值为0 shared_num = multiprocessing.Value('i', 0) # 'i' 表示整型 # 启动两个子进程 p1 = multiprocessing.Process(target=worker, args=(shared_num,)) p2 = multiprocessing.Process(target=worker, args=(shared_num,)) p1.start() p2.start() p1.join() p2.join() print(f"主进程最终结果: num = {shared_num.value}")注意:'i' 是类型代码,表示有符号整数。其他常用类型包括 'd'(双精度浮点)、'c'(字符)等。
import multiprocessingdef modify_array(arr): for i in range(len(arr)): arr[i] = arr[i] * 2if __name__ == "__main__": # 创建长度为5的共享整数数组,初始值为[1,2,3,4,5] shared_arr = multiprocessing.Array('i', [1, 2, 3, 4, 5]) print("修改前:", list(shared_arr)) p = multiprocessing.Process(target=modify_array, args=(shared_arr,)) p.start() p.join() print("修改后:", list(shared_arr))从 Python 3.8 开始,官方引入了 multiprocessing.shared_memory 模块,它允许你创建命名的共享内存块,可以在不同进程中通过名称访问。
import multiprocessingimport numpy as npfrom multiprocessing import shared_memorydef create_and_write(): # 创建原始数据 original_data = np.array([1, 2, 3, 4, 5], dtype=np.int32) # 创建共享内存 shm = shared_memory.SharedMemory(create=True, size=original_data.nbytes) # 将数据写入共享内存 shared_array = np.ndarray(original_data.shape, dtype=original_data.dtype, buffer=shm.buf) shared_array[:] = original_data[:] print(f"写入共享内存,名称: {shm.name}") return shm.name, original_data.shape, original_data.dtypedef read_from_shared(shm_name, shape, dtype): # 连接到已存在的共享内存 existing_shm = shared_memory.SharedMemory(name=shm_name) # 从共享内存读取数据 shared_array = np.ndarray(shape, dtype=dtype, buffer=existing_shm.buf) print(f"读取到的数据: {shared_array}") # 关闭连接(不释放内存) existing_shm.close()if __name__ == "__main__": shm_name, shape, dtype = create_and_write() # 在另一个进程中读取 p = multiprocessing.Process(target=read_from_shared, args=(shm_name, shape, dtype)) p.start() p.join() # 主进程清理共享内存 shm = shared_memory.SharedMemory(name=shm_name) shm.close() shm.unlink() # 释放共享内存⚠️ 注意:使用 shared_memory 时,必须手动调用 unlink() 来释放系统资源,否则可能导致内存泄漏。
multiprocessing.Lock 使用。通过本教程,你已经掌握了 Python 中实现共享内存的两种主流方法。无论是简单的计数器还是复杂的 NumPy 数组,你都可以根据需求选择合适的方案。记住,Python进程间通信的方式很多,而共享内存是其中性能最优的选择之一。
现在,你可以尝试自己编写一个多进程图像处理程序,利用共享内存高效传递图像数据!
关键词:Python共享内存, multiprocessing共享内存, Python进程间通信, 共享内存教程
本文由主机测评网于2025-12-24发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/20251212333.html