• 内存共享


    通信原理:
      在内存中开辟一块空间,对多个进程可见,进程可以写入输入,但是每次写入的内容会覆盖之前的内容。

    函数方法:

    shm = Value(ctype,obj)
      功能: 开辟共享内存空间
      参数: ctype 字符串 要转变的c的类型
        obj 共享内存的初始数据
      返回值 : 返回共享内存对象
      *shm.value 即为共享内存值,对其修改即修改共享内存

    from multiprocessing import Process,Value
    import time
    import random
    
    #创建共享内存
    
    money = Value("i", 2000)
    
    #操作共享内存增加
    def deposite():
        for i in range(100):
            time.sleep(0.05)
            #对value属性操作即操作共享内存数据
            money.value += random.randint(1,200)
    
    #取钱
    def withdraw():
        for i in range(100):
            time.sleep(0.04)
            money.value -= random.randint(1,180)
    
    p1 = Process(target = deposite)
    p2 = Process(target = withdraw)
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    print("余额:",money.value)

    shm = Array(ctype,obj)
      功能 : 开辟共享内存空间
    参数 : ctype : 要转换的数据类型
        obj : 要存入共享内存的数据,比如列表,字符串
        如果是整数则表示开辟空间的个数
    返回值:返回共享内存对象
        *可以通过遍历获取每个元素的值
        e.g. [1,2,3] ---> obj[1] == 2
      * 如果存入的是字符串obj.value

    from multiprocessing import Process,Array
    import time
    
    #创建共享内存,初始放入列表
    #shm = Array("i", [1,2,3,4,5])
    
    #创建共享内存,开辟5个整形空间
    #shm = Array("i", 5)
    
    #存入字符串
    shm = Array("c", "Hello".encode())
    
    def fun():
        for i in shm:
            print(i)
        shm[0] = b"h"
    
    p = Process(target = fun)
    p.start()
    p.join()
    
    for i in shm:
        print(i)
    print(shm.value)
  • 相关阅读:
    安装wampserver2时出现的问题
    微信相关信息
    YII CDbCriteria总结
    discuz@功能的代码
    音乐搜索并生成播放功能
    php生成json和js解析json
    Discuz!提取文章标签
    ⑦ vue项目结构study
    ⑤ elementui 使用字符填充table空白表格项
    ④ keep-alive缓存组件,操作之后需要重新获取数据--activated
  • 原文地址:https://www.cnblogs.com/zengsf/p/9637952.html
Copyright © 2020-2023  润新知