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 08 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
python3实现ftp服务功能(服务端 For Linux)
Mar 24 Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 Python
Python操作mongodb数据库进行模糊查询操作示例
Jun 09 Python
selenium+python 对输入框的输入处理方法
Oct 11 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python3 deque 双向队列创建与使用方法分析
Mar 24 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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实现网站插件机制的方法
2009/11/10 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
详谈JS中实现种子随机数及作用
2016/07/19 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
js获取当前周、上一周、下一周日期
2017/03/19 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
深入解析Python中的urllib2模块
2015/11/13 Python
Python实现读取json文件到excel表
2017/11/18 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
PUMA官方商城:世界领先的运动品牌之一
2016/11/16 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
教师的实习鉴定
2013/12/15 职场文书
元旦晚会邀请函
2014/01/27 职场文书
学校火灾防控方案
2014/06/09 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
详解Python中的进程和线程
2021/06/23 Python