Python 共享内存之 shared_memory

Python 共享内存之 shared_memory

示例通过共享内存读写图片

python 复制代码
from multiprocessing import  shared_memory
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

# 随机颜色 RGBA
def random_color()->tuple:
    rgba = np.random.randint(0,255,size=4)
    return tuple(rgba)

# 用随机数填充像素
def fill_random_pixels(img):
    width, height = img.size
    for x in range(width):
        for y in range(height):
            img.putpixel((x, y), random_color())


if __name__ == "__main__":

    # 选择随机图片或者加载本地图片 
    random_image=False

    img_width = 100
    img_height = 100
    img = Image.new('RGBA', (img_width, img_height))

    if random_image:
        fill_random_pixels(img)
        origin_data = np.array(img)
    else:
        img_path = "C:\\Users\\mingxingwang\\Pictures\\qt-logo.png"
        # 打开图片并转换为numpy数组
        img = Image.open(img_path)
        origin_data = np.array(img)

    #------------- 数据写入共享内存

    # 创建共享内存对象
    shm_a = shared_memory.SharedMemory(create=True, name="my_share_mem",size=origin_data.nbytes)

    #构造关联共享内存的数组
    mem_array = np.ndarray(origin_data.shape, dtype=origin_data.dtype, buffer=shm_a.buf)

    #copy 数据到共享内存
    mem_array[:]=origin_data[:]

    print(f"------------mem_array------------:\n{mem_array}\n")

    #显示原始图片
    origin_image = Image.frombytes(mode='RGBA',size=img.size,data=origin_data)
    plt.imshow(origin_image)
    plt.show()

    #------------- 共享内存获取数据

    existing_shm = shared_memory.SharedMemory(name='my_share_mem')
    array_from_mem = np.ndarray(origin_data.shape, dtype=origin_data.dtype, buffer=existing_shm.buf)
    print(f"------------array_from_mem------------:\n{array_from_mem}\n")

    ##从共享内存构造图片
    img_from_mem = Image.frombytes(mode='RGBA',size=img.size,data=array_from_mem)
    
    ##显示从共享内存获取的图片
    plt.imshow(img_from_mem)
    plt.show()



    shm_a.close()
    shm_a.unlink()
相关推荐
2603_965148118 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
jufeng13079 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk9 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_9563198810 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
知无不研10 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
过期的秋刀鱼!11 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计11 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造
cfm_291411 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
DeepVisionary12 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
C++ 老炮儿的技术栈12 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐