python多线程同步售票系统解决思路

解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题?

【阅读全文】

file

1、分析过程

分析:主要信息点是10家App平台同时售卖1000张电影票。此时,可以使用10个python线程来作为10家App平台,同时售卖必须保证电影票数量的同步,比如A平台卖出了一张票那总共剩余的票数是999,B平台若要再卖出一张票则应该是999-1=998张票。

技术栈分析:python多线程提供了threading模块,并且threading模块提供了同步锁Lock来控制使得票数达到统一的效果。

2、准备过程

将相关的标准库导入到代码块中,不用额外安装其他的非标准库。

import threading  # 多线程相关的操作

import os  # 应用退出操作

import time  # 线程中时间阻塞的控制

初始化一些全局参数,供后面调用过程中使用。

tickets = 1000  # 初始化电影票的总数为1000张

lock_ = threading.Lock()  # 获取一个同步锁对象,用于在多线程逻辑中实现锁的控制

3、实现过程

编写一个函数sell_tickets作为售票的函数实现过程。

def sell_tickets(app_name='承担电影票售票任务App平台'):

    global tickets  # 将这些电影票作为全局变量

    global lock_  # 将获取到的锁对象作为全局变量

    # 使用一个死循环来模拟当前的售票平台一直在售票
    while True:

        lock_.acquire()  # 每个售票平台进入售票后先加锁处理

        if tickets > 0:  # 开始售票之前先判断电影票的数量是否已经售完

            tickets = tickets - 1

            print('当前售票平台:{},卖出一张电影票,剩余电影票:{}张!'.format(app_name, tickets))

            time.sleep(0.1)

        else:

            print('电影票已经全部卖完了!')

            os._exit(0)

        lock_.release()  # 处理完成售票业务后将锁释放

        time.sleep(0.2)

至此,电影票售票的业务逻辑就写完了。下面再通过多线程实现多个电影票出售平台同时售票就OK了。

app_thread_1 = threading.Thread(target=sell_tickets, args=('售票App平台01',))

app_thread_1.start()

app_thread_2 = threading.Thread(target=sell_tickets, args=('售票App平台02',))

app_thread_2.start()

app_thread_3 = threading.Thread(target=sell_tickets, args=('售票App平台03',))

app_thread_3.start()

app_thread_4 = threading.Thread(target=sell_tickets, args=('售票App平台04',))

app_thread_4.start()

app_thread_5 = threading.Thread(target=sell_tickets, args=('售票App平台05',))

app_thread_5.start()

app_thread_6 = threading.Thread(target=sell_tickets, args=('售票App平台06',))

app_thread_6.start()

app_thread_7 = threading.Thread(target=sell_tickets, args=('售票App平台07',))

app_thread_7.start()

app_thread_8 = threading.Thread(target=sell_tickets, args=('售票App平台08',))

app_thread_8.start()

app_thread_9 = threading.Thread(target=sell_tickets, args=('售票App平台09',))

app_thread_9.start()

app_thread_10 = threading.Thread(target=sell_tickets, args=('售票App平台10',))

app_thread_10.start()

file

【往期精彩】

发现几个好玩的游戏编程平台,与君共勉!

python四个性能检测工具,包括函数的运行内存、时间等等...

如何将多张图片合成mp4视频格式,并加入背景音乐...

python如何实现网络测试,了解一下speedtest-cli...

模型已经写好了,怎么表白就看你的了!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python多线程同步售票系统解决思路 - Python技术站

(0)
上一篇 2023年4月2日 下午5:39
下一篇 2023年4月2日 下午5:39

相关文章

  • 自动化工具:PyAutoGUI的鼠标与键盘控制,解放双手的利器

    PyAutoGUI是一个简单易用,跨平台的可以模拟键盘鼠标进行自动操作的python库。 【阅读全文】 使用pip的方式安装pyautogui模块 pip install pyautogui pyautogui在使用的时候有两个比较关键的隐患(程序在启动起来以后很难关闭)需要注意一下。一是鼠标出现在屏幕的最上方会出现报错,二是键盘的自动操作太快,所以需要先设…

    2023年4月2日
    00
  • python 自定义异常/raise关键字抛出异常

    在编程过程中合理的使用异常可以使得程序正常的执行。有直接抛出异常的形式,也能通过捕获异常加入异常时的业务逻辑处理。 【阅读全文】 创建自定义异常类案例 class MyException(Exception): def __init__(self, msg): ”’ :param msg: 异常信息 ”’ self.msg = msg 使用raise关键…

    2023年4月2日
    00
  • 刚刚发现的可视化动态图库ipyvizzu,太好看了

    ipyvizzu生成的可视化图形是动态的,以前我们生成的可视化图形都是静态不动的。 它是python中的非标准库ipyvizzu,因此使用pip的方式额外安装一下。 【阅读全文】 pip install ipyvizzu 1、小试牛刀 首先,导入绘图相关的库ipyvizzu,以及pandas用来做数据导入操作。 import pandas as pd fro…

    2023年4月2日
    00
  • 如何将多张图片合成mp4视频格式,并加入背景音乐…

    【阅读全文】 实现的思路:将准备好的图片通过opencv读取出来,并将其设置好帧数等参数后合成为无声视频。最后通过moviepy编辑视频将背景音乐加入到视频中。 开始之前还是需要说明一下非标准库的来源,因为有些库的名称和需要导入模块的名称不一定就是一样的。 import os # python标准库,不需要安装,用于系统文件操作相关 import cv2 #…

    2023年4月2日
    00
  • 记住这些windows网络操作命令,轻松搞定自己的电脑网络!

    windows操作系统中的网络操作主要是网络的配置、网络连接的监听、网络的路由跟踪、DNS服务器解析等等。 【阅读全文】 针对上面的这几项操作,整理了关于windows网络操作相关的使用方法。 1、网络配置 网络配置主要有ip地址、子网掩码、默认网关、DNS服务器地址,一般情况下,在公网的状态下这些地址都是自动获取的不需要我们进行特别的配置。 但是,在我们的…

    2023年4月2日
    00
  • 模型已经写好了,怎么表白就看你的了

    【阅读全文】 开始之前先来看看效果图,在控制台输入相应的参数设置即可生成自己独特的表白图。 想要在图片上书写什么样的信息,就看你的发挥了,哈哈哈~ import turtle as tle # 小乌龟绘图库 使用turtle小乌龟画图之前,先进行全局参数初始化的设置,并使得全局初始化函global_init可以动态传参供后面的方便调用。 def global…

    2023年4月2日
    00
  • 用python做一个文本翻译器,自动将中文翻译成英文,超方便的

    translate非标准库是python中可以实现对多种语言进行互相翻译的库,使用时只需要设置目标语言(比如:中文、英文)后,会自动将原始文本翻译成我们需要的目标语言。 【阅读全文】 使用pip的方式安装translate非标准库。 pip install translate 准备好之后进行代码编写过程,实现的方式也比较常规。 输入需要翻译的文本文件路径。 …

    2023年4月2日
    00
  • 英语没学好到底能不能做coder,别再纠结了先学起来

    其实,编程中用到的英文词汇并不多,经常用到的写着写着就记住了。大多数时候只有给变量或者对象起名的时候才会去Google上查。于是,我将经常在coding中用到的词汇总结了一下。 【阅读全文】 A字母开头的英文词汇 Appearance外表assert/assertion异常add添加append附加args/argument参数attribute属性 B字母…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部