网络编程:进程创建--标准库multiprocessing模块(五--共享内存)
1、共享内存
【1】在内存中开辟一段空间,存储数据,对过个进程可见。
【2】每次写入共享内存中的内容都会覆盖之前的内容。
【3】对内存的读操作页不会改变内存中的内容
from multiprocessing import Process,Value
2、开辟共享内存空间
shm = Value(ctype,obj)
功能: 开辟共享内存空间
参数: ctype, 字符串 ,要转变的c的类型
obj 共享内存的初始数据
返回值 : 返回共享内存对象
shm.value ,表示共享内存中的值
【mulPro-Value.py】
from multiprocessing import Process,Value
import time
import random
#创建共享内存
money = Value('i',6000)
#存钱
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)
#对value的修改就是对共享内存的修改
money.value -= random.randint(1,200)
d = Process(target = deposite)
w = Process(target = withdraw)
d.start()
w.start()
d.join()
w.join()
print(money.value)
from multiprocessing import Process,Array
3、开辟共享内存空间
shm = Array(ctype,obj)
功能 : 开辟共享内存空间
参数 : ctype,要转换的数据类型
obj,要存入共享内存的数据
① 列表、字符串 ,表示要存入的内容,要求类型相同
② 整数, 表示要开辟几个单元的空间
返回值 : 返回共享内存对象,可迭代对象
【mulPro-Array.py】
from multiprocessing import Process,Array
import time
#创建共享内存
shm = Array('c',b"hello") #字符类型要求是bytes
#开辟5个整形单元的共享内存空间
# shm = Array('i',5)
def fun():
for i in shm:
print(i)
shm[0] = b"H"
p = Process(target = fun)
p.start()
p.join()
print(shm.value) #从首地址打印字符串
# for i in shm:
# print(i)
#结果
b'h'
b'e'
b'l'
b'l'
b'o'
b'Hello'