练习1、模拟抢车票(进程同步 锁)
代码1:(并发运行,效率高,但竞争同一文件,数据写入错乱)
from multiprocessing import Process
import time,json,random
def search():
dic=json.load(open('db.txt'))
print('剩余票数%s' %dic['count'])
def get():
dic=json.load(open('db.txt'))
time.sleep(0.1) #模拟读数据的网络延迟
if dic['count'] >0:
dic['count']-=1
time.sleep(0.2) #模拟写数据的网络延迟
json.dump(dic,open('db.txt','w'))
print('购票成功')
def task():
search()
get()
for i in range(3): #模拟并发100个客户端抢票
p=Process(target=task)
p.start()
代码2:加锁:由并发变成了串行,牺牲了运行效率,但保证了数据的安全
from multiprocessing import Process,Lock
import json,time
def search():
dic=json.load(open('db.txt'))
print('剩余票数%s' %dic['count'])
def get():
dic = json.load(open('db.txt'))
time.sleep(0.1)
if dic['count']>0:
dic['count']-=1
time.sleep(0.1)
json.dump(dic,open('db.txt','w'))
print('购票成功')
else:
print('没票了')
def task(lock):
search()
lock.acquire()
get()
lock.release()
lock=Lock()
for i in range(3):
p=Process(target=task,args=(lock,))
p.start()
Python练习(day9)
原创
©著作权归作者所有:来自51CTO博客作者西鼠的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:僵尸进程与孤儿进程
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python Day9
进程 互斥锁 守护进程 队列 线程 GIL解释器锁 paramiko模块
python Day9 -
day9 python学习随笔
线程
线程 python -
Django学习 Day9
但是如果用户id=1在多个银行同时存款时,会导致在get时他们的数据在分布式环境中是相同的,这就导致我们
django 学习 python User 字段 -
SQL学习day9
SQL学习day9
隔离级别 MySQL 锁机制 -
牛客java专项练习-day9
...
Java