Python练习(day9)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python练习(day9)相关的知识,希望对你有一定的参考价值。
练习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)的主要内容,如果未能解决你的问题,请参考以下文章
Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段