python 进程间通信方式 --共享内存

python 进程间通信方式 --共享内存

          • 通信原理
          • 特点
          • 语法
          • 示例

通信原理

在内存中开辟一块空间,进程可以写入内容和读取内容完成通信,但是每次写入内容会覆盖之前内容(每次从首地址操作),不能同时保留多次内容,只能存一个内容。

特点

效率最高的通信方案
只能存放一个数据
每一次的写入都从地址某一个固定的起始位置开始并覆盖原内容

语法
  1. value:一个值
from multiprocessing import Value,Array

#1. value() 存一个值
#开辟共享内存空间
#ctype  声明共享内存空间类型 'i'(整型)  'f'(浮点型)  'c'(字节串),声明后只能放该类型的数据
#data   共享内存空间初始数据(数据类型与ctype保持一致)
obj = Value(ctype,data)

#读写共享内存:对该属性的修改就是对共享内存的修改,共享内存只能有一个值
obj.value
  1. array:一组值
#array() 数组,存一组值(只能存字节串(或者字符串)和列表,因为是c语言中来的)
#开辟共享内存空间
#ctype  表示共享内存数据类型
#data   整数则表示开辟空间的大小,其他数据类型表示开辟空间存放的初始化数据:e.g. [1,2,3]
obj = Array(ctype,data)

#读写
通过遍历obj可以得到每个值,直接可以通过索引序号修改任意值
示例
  1. value:存放一个值
from multiprocessing import Process,value
import time
from random import randint

#创建共享内存,声明整型,初始值5000
money = Value('i',5000)

#操作内存
def man():
	for i in range(30):
		time.sleep(0.2)
		money.value += randint(1,1000)

#操作共享内存
def girl():
	for i inrange(30):
		time.sleep(0.15)
		money.value -= randint(100,800)
p1 = Process(target=man)
p2 = Process(target=girl)
p1.start()
p2.start()
p1.join()
p2.join()

print('一个月余额:‘,money.value)
  1. array: 存放一组数据
from multiprocessing import Process,Array

#创建共享内存空间,声明类型为整型,初始值为[1,2,3,4,5]
shm = Array('i',[1,2,3,4,5]

def fun():
	#迭代读取共享内存中的值,且只能通过for循环一个个取出
	for i in shm:
		print(i)
	#在子进程中修改共享内存中的值
	shm[1] = 8888

p = Process(target=fun)
p.start()
p.join()
#在父进程中查看值,实现进程间通信
for i in shm:
	print(i)

你可能感兴趣的:(python,#进程,python,进程,共享内存)