利用Python实现多窗口订票系统,利用

threading.Lock()

避免出现一票多卖,无票也卖的情况,并规范化输出情况。

代码:

import threading

import time

tickets, lock = 20, threading.Lock()

class TicketWindows(threading.Thread):

def __init__(self, window_name):

threading.Thread.__init__(self)

self.window_name = window_name

def run(self):

sell_tickets(self.window_name)

def sell_tickets(threadName):

global tickets

while tickets > 0:

lock.acquire() # 加一个同步锁,类似Java中的synchronized

if tickets > 0:

print(threadName, "准备出票,还剩余票:", tickets, "张")

tickets -= 1

print(threadName, "卖出1张车票,还剩:", tickets, "张")

print("----------------------------------")

else:

print("车票售空!")

lock.release() # 释放同步锁

try:

time.sleep(1)

except RuntimeError:

print("error!")

if __name__ == "__main__":

window1 = TicketWindows("窗口1")

window2 = TicketWindows("窗口2")

window3 = TicketWindows("窗口3")

window1.start()

window2.start()

window3.start()

window1.join()

window2.join()

window3.join()

print("退出主线程")

输出:

窗口1 准备出票,还剩余票: 20 张

窗口1 卖出1张车票,还剩: 19 张

----------------------------------

窗口2 准备出票,还剩余票: 19 张

窗口2 卖出1张车票,还剩: 18 张

----------------------------------

窗口3 准备出票,还剩余票: 18 张

窗口3 卖出1张车票,还剩: 17 张

----------------------------------

窗口2 准备出票,还剩余票: 17 张

窗口2 卖出1张车票,还剩: 16 张

----------------------------------

窗口3 准备出票,还剩余票: 16 张

窗口3 卖出1张车票,还剩: 15 张

----------------------------------

窗口1 准备出票,还剩余票: 15 张

窗口1 卖出1张车票,还剩: 14 张

----------------------------------

窗口3 准备出票,还剩余票: 14 张

窗口3 卖出1张车票,还剩: 13 张

----------------------------------

窗口1 准备出票,还剩余票: 13 张

窗口1 卖出1张车票,还剩: 12 张

----------------------------------

窗口2 准备出票,还剩余票: 12 张

窗口2 卖出1张车票,还剩: 11 张

----------------------------------

窗口1 准备出票,还剩余票: 11 张

窗口1 卖出1张车票,还剩: 10 张

----------------------------------

窗口3 准备出票,还剩余票: 10 张

窗口3 卖出1张车票,还剩: 9 张

----------------------------------

窗口2 准备出票,还剩余票: 9 张

窗口2 卖出1张车票,还剩: 8 张

----------------------------------

窗口1 准备出票,还剩余票: 8 张

窗口1 卖出1张车票,还剩: 7 张

----------------------------------

窗口3 准备出票,还剩余票: 7 张

窗口3 卖出1张车票,还剩: 6 张

----------------------------------

窗口2 准备出票,还剩余票: 6 张

窗口2 卖出1张车票,还剩: 5 张

----------------------------------

窗口1 准备出票,还剩余票: 5 张

窗口1 卖出1张车票,还剩: 4 张

----------------------------------

窗口2 准备出票,还剩余票: 4 张

窗口2 卖出1张车票,还剩: 3 张

----------------------------------

窗口3 准备出票,还剩余票: 3 张

窗口3 卖出1张车票,还剩: 2 张

----------------------------------

窗口1 准备出票,还剩余票: 2 张

窗口1 卖出1张车票,还剩: 1 张

----------------------------------

窗口3 准备出票,还剩余票: 1 张

窗口3 卖出1张车票,还剩: 0 张

----------------------------------

车票售空!

退出主线程

注意:使用 synchronized 修饰run()方法是无效的!这会导致自始至终只有一个窗口进行卖票操作!

总结

以上所述是小编给大家介绍的Python利用多线程同步锁实现多窗口订票系统,希望对大家有所帮助!

python 多线程同步_Python利用多线程同步锁实现多窗口订票系统(推荐)相关推荐

  1. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  2. 【Python】【项目模拟】模拟火车订票系统

    本项目代码基于python大作业--列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实.项目总体仍较为粗糙,后面还需继续完善. 部分项目界面 ...

  3. 飞机订票系统 python实现(大二上数据结构课设)

    说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...

  4. 可操作性强!Python实现一个电影订票系统!

    来源丨Python小二 一.效果展示 通过Python实现一个电影订票系统,效果如下所示: 二.整体结构图 三.代码分解 3.1 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以 ...

  5. [附源码]Python计算机毕业设计航空订票系统Django(程序+LW)

    该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+N ...

  6. [附源码]Python计算机毕业设计电影票网上订票系统

    项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...

  7. 用Python实现一个电影订票系统!

    一.效果展示  通过Python实现一个电影订票系统,效果如下所示: 二.整体结构图 三.代码分解 3.1 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对 ...

  8. 我制作了一个基于Python 的电影订票系统

    文章目录 一.效果展示 二.整体结构图 三.代码分解 3.1 infos.py 3.2 seat\_book.py 3.3 film\_selector.py 3.4 main.py 一.效果展示 通 ...

  9. 【文末赠书】用Python实现一个电影订票系统!

    来源丨Python小二 一.效果展示 通过Python实现一个电影订票系统,效果如下所示: 二.整体结构图 三.代码分解 3.1 infos.py 一部电影的详细信息适合用 字典 结构来存储,我们可以 ...

最新文章

  1. 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-目录
  2. leetcode347. 前 K 个高频元素
  3. python邮件发送哪个好_python发邮件(一)
  4. [线性代数]Note4--A的LU分解转置-置换-向量空间
  5. c语言 关键字const_C ++ const关键字| 查找输出程序| 套装1
  6. php多线程是什么意思,多线程是什么意思
  7. Timer类 和 TimerTask类。一种有用计时器工具。可以每隔相同时间去执行某任务一次。
  8. 特殊年份(java)
  9. rtmp服务器 协议之同步
  10. Win32汇编---控件的超类化感想
  11. git 下载指定历史版本
  12. Smartbi制作报表教程:热销车型分类排名总表
  13. 【SCOI2009】粉刷匠
  14. Android恶意样本分析——frida破解三层锁机样本
  15. 为MacBook制作一个随身携带的windows系统
  16. Scratch节假日主题课:植树节种五棵树
  17. SQL查询结果加序列号
  18. 揭秘OPhone白手起家前后:一个系统的诞生
  19. 兄弟连python培训学费多少
  20. U盘/移动硬盘安装CentOS系列系统

热门文章

  1. 工科学生考研能选择计算机专业么,这8个“工科专业”考研后发展会更好,毕业生紧缺度高,前途很好!...
  2. python如何爬取sci论文中所需的数据_sci论文中的科研数据处理方法
  3. 冒烟指数:大数据监测互联网金融风险
  4. 【操作系统】上下文切换
  5. 【计算机网络】为什么一个路由器会有两个wifi信号
  6. 【Java】CMD编译Java源码遇到\ufeff问题的解决方法
  7. [Catalan]求解随机出栈可能数(洛谷P1044题题解,Java语言描述)
  8. 【Python】Python海龟绘图秀场
  9. Swift 优雅的打印Log
  10. GitHub教程手册、使用流程