from multiprocessing import Process import json,time #在当前目录下创建一个文件(db) #文件db的内容:{"count":1}表示的是余票数量 def search(): #查询余票 fp = open('db','r') dic = json.load(fp) #反序列化,将文件中的json数据转换成python字典 print('剩余车票数为:{}'.format(dic['count'])) def get(): #抢票,每次只能购买一张 fp = open('db', 'r') dic = json.load(fp) time.sleep(0.1) if dic['count'] > 0: time.sleep(0.2) dic['count'] -= 1 time.sleep(0.1) json.dump(dic, open('db', 'w')) #购票后,回写到文件中 print('购票成功') def task(): search() #先查询 get() #后购买 if __name__ == "__main__": for i in range(3): p = Process(target=task) p.start() #运行结果 #剩余车票数为:1 #剩余车票数为:1 #剩余车票数为:1 #购票成功 #购票成功 #购票成功
from multiprocessing import Process import json,time from multiprocessing import Lock #在当前目录下创建一个文件(db) #文件db的内容:{"count":1}表示的是余票数量 def search(): #查询余票 fp = open('db','r') dic = json.load(fp) #反序列化,将文件中的json数据转换成python字典 print('剩余车票数为:{}'.format(dic['count'])) def get(): #抢票,每次只能购买一张 fp = open('db', 'r') dic = json.load(fp) time.sleep(0.1) if dic['count'] > 0: time.sleep(0.2) dic['count'] -= 1 time.sleep(0.1) json.dump(dic, open('db', 'w')) #购票后,回写到文件中 print('购票成功') def task(lock): lock.acquire() #加锁 search() #先查询 get() #后购买 lock.release() #解锁 if __name__ == "__main__": lock = Lock() #创建一把进程锁 for i in range(3): p = Process(target=task,args=(lock,)) p.start() #运行结果 #剩余车票数为:1 #购票成功 #剩余车票数为:0 #剩余车票数为:0
注意点:加锁会失去异步效果