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

相关文章

  • python中最简单的turtle绘图:奥运五环

    为什么说奥运五环的绘制是最简单的,实际上它的绘制过程就是通过画笔画出五个相同大小的圆圈即可。不同的是圆圈的位置不同的。 阅读全文 开始之前,我特地去找了turtle的官网地址贴在下面,其实学习一个技术点官网的作用还是非常重要的。毕竟你在网上找到大量的资料都是二手资料。 因此,你可能并不了解这个技术点产生的初衷,最后,一个技术点就成以讹传讹。所以,鼓励大家学习…

    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
  • python打包技巧:彻底解决pyinstaller打包exe文件太大的问题

    之前也写过很多的小工具,粉丝朋友们应该都知道在本公众号内回复任意关键字即可获取以往的工具源码或是exe可执行应用。 【阅读全文】 因为以往发过的小工具基本都是几十MB大小的exe应用,也就没有在意exe太大给大家带来的困扰,今天就准备来彻底的解决一下这个问题。 其实每次打包的exe的应用过大无非就是两个方面的语言因导致的,一是我们在开发的代码的过程中为了简便…

    2023年4月2日
    00
  • 知识汇总:python办公自动化应该学习哪些内容

    【阅读全文】 当前python自动化越来越受到欢迎,python一度成为了加班族的福音。还有大部分人想利用python自动化来简化工作,不知道从何处下手,所以,这里整理了一下python自动化过程中的各种办公场景以及需要用到的python知识点。 Excel办公自动化 python 针对excel表格处理的非标准库应该是最多的,这也是把excel办公自动化放…

    2023年4月2日
    00
  • 我使用pangu模块做了一个文本格式化小工具!

    其实使用pangu做文本格式标准化的业务代码在之前就实现了,主要能够将中文文本文档中的文字、标点符号等进行标准化。 阅读全文 但是为了方便起来我们这里使用了Qt5将其做成了一个可以操作的页面应用,这样不熟悉python的朋友就可以不用写代码直接双击运行使用就OK了。 为了使文本格式的美化过程不影响主线程的使用,特地采用QThread子线程来专门的运行文本文档…

    2023年4月2日
    00
  • python实现excel数据与mysql数据库互通有无

    【阅读全文】 python在制作一些小工具上本身就有着得天独厚的优势,大多数非标准库的应用只需要进行简单的安装即可使用。 比如:使用python将excel中的数据导入到mysql数据库表中,或是将mysql数据库表中的数据直接导出为excel都只需要简单的几行代码就可以完成,假如使用Java来做这件事强那可就有些复杂了呢。 话不多说,接下来直接进入正题..…

    2023年4月2日
    00
  • python-turtle绘制雪容融,已打包成exe可直接运行

    之前我们放出了冰墩墩绘制的源代码,雪容融的绘制却是一直没有。今天在逛论坛的时候终于发现有大佬写出来了,给大佬递茶!先来看看绘制的效果如何,个人觉得还是很惟妙惟肖的,哈哈哈~ 阅读全文 由于本文主要是通过图片的方式来展示代码块的实现过程的,需要完整源代码请前往文末查看源代码的获取方式。 话不多说,我们直接进入主题,说明一下我们改造以后的源代码,绘图的非标准库这…

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