进程相关内容
1、基于多进程实现并发的套接字通信,完成如下功能:
1、客户端链接功成功后,先登录,登录成功后才可以执行其他功能
2、登录成功后可以执行下载功能
3、登录成功后可以执行上传功能
2.什么是互斥锁
顾名思义,相互排斥,一人使用,其他人不能使用。
锁其实就是给执行代码加上限制,本质上是一个标志为True,False
1用来解决什么问题?
当并发的操作共享资源发生的数据安全问题
2解决问题的原理是什么?
将访问共享资源的代码由并发变为串行
3与join是的区别是什么?
join:------
join是让整个进程任务全都串行
join是固定死任务的执行顺序
mutex------
锁可以仅将部分代码变为串行
锁-多进程之间还是公平竞争的
3.编写模拟抢票代码 分析总结何时会出现数据错乱
from multiprocessing import Process,Lock
import json
def show():
with open("db.json")as f:
data=json.load(f)
print('剩余票数',data['count'])
def buy():
with open("db.json")as f:
data=json.load(f)
if data['count']>0:
data['count']-=1
with open("db.json",'wt')as f2:
json.dump(data,f2)
print('抢票成功')
def task(mutex):
show()
mutex.acquire()
buy()
mutex.release()
if __name__ == '__main__':
mutex=Lock()
for i in range(5):
p=Process(target=task,args=(mutex,))
p.start()
#何时会错乱
环境:
前提给的票数限制越少,越会出现问题
一张票出现并发的话,被多人抢到,出现实际多人了是同一张
json读码出问题,wt写入清空,在写入的同时,另一方因为速度快,读入又写入,导致甲方失败
在读入的时候不改变,在buy的进程中前后加锁后,限制了买的过程中的读入,保证安全
show还是可以并发,buy加锁串行-----读写分开
1两个进程同时在写的时候肯定会出问题
2写的进程正在进行,你读的进程又来了
4.进程队列是什么 有什么特点
是一种特殊的容器
特点是先进先出
5.进程间通讯有哪些方法说明优缺点
1共享文件
优点:数据量理论上没有限制
缺点:效率低
适用于:交互不频繁,且数据量较大情况
2共享内存(主要方式)
优点:效率高
缺点:数据量不能太大
适用于:交互频繁,交互量小
3管道:
管道是基于文件的,它是单向的,百年城比较复杂
4socket
编程复杂,更适用于基于网络交换数据
程序的道路上一去不复返