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中的装饰器的用法
Apr 24 Python
python实现周期方波信号频谱图
Jul 21 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
Python饼状图的绘制实例
Jan 15 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python如何将两个txt文件内容合并
Oct 18 Python
Python如何计算语句执行时间
Nov 22 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python发送邮件封装实现过程详解
May 09 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
python list的index()和find()的实现
Nov 16 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
Dec 11 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
桌面中心(二)数据库写入
2006/10/09 PHP
PHP Session 变量的使用方法详解与实例代码
2013/09/11 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
微信中一些常用的js方法汇总
2015/03/12 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
微信小程序Flex布局用法深入浅出分析
2019/04/25 Javascript
vue elementUI 表单校验的实现代码(多层嵌套)
2019/11/06 Javascript
python中List的sort方法指南
2014/09/01 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python-opencv 双线性插值实例
2020/01/17 Python
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
幼师自荐信范文
2013/10/06 职场文书
毕业生自我鉴定实例
2014/01/21 职场文书
给领导的检讨书
2014/02/16 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
2014国庆节餐厅促销活动策划方案
2014/09/16 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
学生会干部任命书
2015/09/21 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
2016年乡镇七一建党节活动总结
2016/04/05 职场文书
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python