内存共享

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

函数方法:

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)
原文地址:https://www.cnblogs.com/zengsf/p/9637952.html