10月27日 抢票原理小程序
目录
抢票原理小程序
首先建立一个票数文件夹,然后再创建一个程序文件
程序文件里面要有两个功能,一个查票功能函数,一个购票功能函数,然后一个主要的进程,这个进程以函数的形式给内部添加这个查票和购票的函数,然后在添加全局调用的方法开启子进程
文件内容
{"count": 0}
文件里面不要添加注释
程序文件如下
import json
import os
import time
from multiprocessing import Process
# 这里是查票的功能
def chakan():
time.sleep(1) # 这是模拟网路
with open('db.txt', mode='rt', encoding='utf-8') as du: # 这里打开文件夹然后读取票的数量
res = json.load(du)
print(f'还剩{res["count"]}')
# 这里是取票的功能
def get():
with open('db.txt', mode='rt', encoding='utf-8') as du:
res = json.load(du)
print(f'还剩{res["count"]}')
# 这里添加一个判断
time.sleep(2) # 模拟网络
if res["count"] > 0:
res["count"] -= 1 # 给文件内的票数进行减去
with open('db.txt', mode='wt', encoding='utf-8') as huo:
json.dump(res, huo)
time.sleep(2) # 模拟网络
print(f'{os.getpid()}抢票成功')
else:
print('票已经售空了!!!!')
# 这里打印抢票失败的情况
print(f'{os.getpid()}抢票失败')
def task(): # 这里就是主进程
chakan()
get()
if __name__ == '__main__':
for i in range(5):
p = Process(target=task)
p.start()
p.join() # 用这个来阻塞主进程,目的就是让该子进程结束了再运行下一个进程
#为了保证数据的安全,要牺牲掉效率,如果没有join的就会造成一张票多个人都买到了同一个票
结果如下