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之入门(二)基本数据类型
May 25 Python
Python中的自省(反射)详解
Jun 02 Python
浅析Python编写函数装饰器
Mar 18 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 Python
python中while和for的区别总结
Jun 28 Python
从多个tfrecord文件中无限读取文件的例子
Feb 17 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
python实现简单的五子棋游戏
Sep 01 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
openflashchart 2.0 简单案例php版
2012/05/21 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
JavaScript中的this机制
2016/01/30 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
中学教师实习自我鉴定
2013/09/28 职场文书
综合实践教学反思
2014/01/31 职场文书
《两个铁球同时着地》教学反思
2014/02/13 职场文书
自主招生推荐信范文
2014/05/10 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
贷款承诺书范文
2014/05/19 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
本科生求职信
2014/06/17 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
详解python的异常捕获
2022/03/03 Python