10月27日 抢票原理小程序

发布时间 2023-10-29 19:01:31作者: songjunwan

抢票原理小程序

首先建立一个票数文件夹,然后再创建一个程序文件

程序文件里面要有两个功能,一个查票功能函数,一个购票功能函数,然后一个主要的进程,这个进程以函数的形式给内部添加这个查票和购票的函数,然后在添加全局调用的方法开启子进程

文件内容

{"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的就会造成一张票多个人都买到了同一个票

结果如下