Python使用面向对象方式创建线程实现12306售票系统


Posted in Python onDecember 24, 2015

目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用。

面向对象技术简介

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例变量:定义在方法中的变量,只作用于当前实例的类。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。

实例化:创建一个类的实例,类的具体对象。

方法:类中定义的函数。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

---恢复内容开始---

通过面向对象的方法实现多线程,其核心是继承threading.Thread类。我们自己定义了一个类BoothThread, 这个类继承自thread.Threading类,通过修改Thread类的run()方法来定义线程所要执行的命令。

import threading # Python主要通过标准库中的threading包来实现多线程
import time
import os
#作为间隔 每次调用间隔.s
def doChore():
time.sleep(.)
# 定义一个类BoothThread继承自thread.Threading类
class BoothThread(threading.Thread):
def __init__(self, tid, monitor):
self.tid = tid
self.monitor = monitor
threading.Thread.__init__(self)
def run(self):
while True:
monitor['lock'].acquire() # 调用lock.acquire() 加锁
if monitor['tick'] != :
monitor['tick'] = monitor['tick'] - # 售票 售出一张减少一张
print(self.tid,':now left:',monitor['tick']) # 剩下的票数
doChore() 
else:
print("Thread_id",self.tid," No more tickets")
os._exit() # 票售完 退出程序
monitor['lock'].release() # 释放锁
doChore() 
monitor = {'tick':, 'lock':threading.Lock()} # 初始化票数
# 总共设置了个线程
for k in range():
new_thread = BoothThread(k, monitor) # 创建线程; Python使用threading.Thread对象来代表线程 类BoothThread继承自thread.Threading类 
new_thread.start() # 调用start()方法启动线程

这里使用了一个词典 monitor存放全局变量,然后把词典作为参数传递给线程函数。由于词典是可变数据对象,所以当它被传递给函数的时候,函数所使用的依然是同一个对象,相当于被多个线程所共享。

以上内容给大家介绍了Python使用面向对象方式创建线程实现12306售票系统的全部叙述,希望大家喜欢。

Python 相关文章推荐
python原始套接字编程示例分享
Feb 21 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
python解决Fedora解压zip时中文乱码的方法
Sep 18 Python
Python3中的列表生成式、生成器与迭代器实例详解
Jun 11 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
Python连接mysql方法及常用参数
Sep 01 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 #Python
Python生成随机验证码的两种方法
Dec 22 #Python
基于python实现微信模板消息
Dec 21 #Python
python如何实现远程控制电脑(结合微信)
Dec 21 #Python
python从入门到精通(DAY 3)
Dec 20 #Python
python从入门到精通(DAY 2)
Dec 20 #Python
利用python代码写的12306订票代码
Dec 20 #Python
You might like
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
yii用户注册表单验证实例
2015/12/26 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
jQuery Easyui datagrid连续发送两次请求问题
2016/12/13 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
js实现简单模态框实例
2018/11/16 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
Python遍历字典方式就实例详解
2019/12/28 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
PHP高级工程师面试问题推荐
2013/01/18 面试题
监理员的岗位职责
2013/11/13 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
雄兵连:第三季先行图公开,天使恶魔联合,银河之力的新力量
2021/06/11 国漫
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
2022/04/14 Python
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL