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中for循环详解
Jan 17 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python利用Guetzli批量压缩图片
Mar 23 Python
TensorFlow实现AutoEncoder自编码器
Mar 09 Python
python中的turtle库函数简单使用教程
Jul 23 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
django settings.py 配置文件及介绍
Jul 15 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
Dec 18 Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
Jul 07 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 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中CI操作多个数据库的代码
2012/07/05 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
详解Python中的分支和循环结构
2020/02/11 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
国贸专业的职业规划范文
2014/01/23 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
后勤工作个人总结
2015/02/28 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
python自动化之如何利用allure生成测试报告
2021/05/02 Python
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python
Selenium浏览器自动化如何上传文件
2022/04/06 Python