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抓取京东价格分析京东商品价格走势
Jan 09 Python
在Python中利用Into包整洁地进行数据迁移的教程
Mar 30 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
详解Python实现多进程异步事件驱动引擎
Aug 25 Python
深入浅析python 协程与go协程的区别
May 09 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
简单了解python元组tuple相关原理
Dec 02 Python
Python脚本去除文件的只读性操作
Mar 05 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
Mar 06 Python
python代码中怎么换行
Jun 17 Python
python脚本第一行如何写
Aug 30 Python
python中subplot大小的设置步骤
Jun 28 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实现读取和编写XML DOM代码
2010/04/07 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
Document 对象的常用方法
2009/07/31 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现对文件进行单词划分并去重排序操作示例
2018/07/10 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
Django-imagekit的使用详解
2020/07/06 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
日语专业推荐信
2013/11/12 职场文书
感恩节活动方案
2014/01/27 职场文书
销售员岗位职责范本
2014/02/03 职场文书
家长对学生的评语
2014/04/18 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
工程索赔意向书
2014/08/30 职场文书
学校安全管理制度
2015/08/06 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript
Python Pytorch查询图像的特征从集合或数据库中查找图像
2022/04/09 Python