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


Posted in Python onDecember 22, 2019

利用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中的函数用法入门教程
Sep 02 Python
Python下的subprocess模块的入门指引
Apr 16 Python
python使用matplotlib绘制折线图教程
Feb 08 Python
浅谈Python基础之I/O模型
May 11 Python
详解pyqt5 动画在QThread线程中无法运行问题
May 05 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Python通用循环的构造方法实例分析
Dec 19 Python
Python学习笔记之集合的概念和简单使用示例
Aug 22 Python
Python Django框架模板渲染功能示例
Nov 08 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
Python使用re模块验证危险字符
May 21 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 Python
python使用正则来处理各种匹配问题
Dec 22 #Python
Python中base64与xml取值结合问题
Dec 22 #Python
python操作cfg配置文件方式
Dec 22 #Python
python实现局域网内实时通信代码
Dec 22 #Python
python 解决flask uwsgi 获取不到全局变量的问题
Dec 22 #Python
Python调用scp向服务器上传文件示例
Dec 22 #Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 #Python
You might like
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
flask中使用蓝图将路由分开写在不同文件实例解析
2018/01/19 Python
python实现K最近邻算法
2018/01/29 Python
python使用Tesseract库识别验证
2018/03/21 Python
python的中异常处理机制
2018/08/30 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
提供世界各地便宜的机票:Sky-tours
2016/07/21 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
财务副总经理工作职责
2013/11/25 职场文书
学校介绍信范文
2014/01/14 职场文书
小学生安全保证书
2015/05/09 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
Python办公自动化解决world文件批量转换
2021/09/15 Python