通信原理:
在内存中开辟一块空间,对多个进程可见,进程可以写入输入,但是每次写入的内容会覆盖之前的内容。
函数方法:
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)