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 相关文章推荐
详解Python3中的Sequence type的使用
Aug 01 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
python pcm音频添加头转成Wav格式文件的方法
Jan 09 Python
Python给图像添加噪声具体操作
Mar 03 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
Pytorch实现LSTM和GRU示例
Jan 14 Python
Python日志处理模块logging用法解析
May 19 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
Django restful framework生成API文档过程详解
Nov 12 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
浅谈怎么给Python添加类型标注
Jun 08 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
jQuery中$(function() {});问题详解
2015/08/10 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python标准库sched模块使用指南
2017/07/06 Python
Python编写一个优美的下载器
2018/04/15 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python之Class&Object用法详解
2019/12/25 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
青年志愿者先进事迹
2014/05/06 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
统计员岗位职责
2015/02/11 职场文书
储备店长岗位职责
2015/04/14 职场文书
幼儿园见习总结
2015/06/23 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android