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中的map()函数和reduce()函数的用法
Apr 27 Python
详解Python字符串对象的实现
Dec 24 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
PyTorch中的Variable变量详解
Jan 07 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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中spl_autoload_register函数的用法总结
2013/11/07 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
php简单复制文件的方法
2016/05/09 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
2013/03/21 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
JS不完全国际化&本地化手册 之 理论篇
2016/09/27 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
原生js轮播特效
2017/05/18 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
JS实现小星星特效
2019/12/24 Javascript
nodejs对mongodb数据库的增加修删该查实例代码
2020/01/05 NodeJs
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
化工专业应届生求职信
2013/11/08 职场文书
分厂厂长岗位职责
2013/12/29 职场文书
高中教师考核方案
2014/05/18 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
《钓鱼的启示》教学反思
2016/02/18 职场文书