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调用微信公众平台接口操作示例
Jul 08 Python
Django跨域请求问题的解决方法示例
Jun 16 Python
python tkinter界面居中显示的方法
Oct 11 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
详解python使用turtle库来画一朵花
Mar 21 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
python实现按关键字筛选日志文件
Dec 24 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python StringIO如何在内存中读写str
Jan 07 Python
pandas 像SQL一样使用WHERE IN查询条件说明
Jun 05 Python
python中用ctypes模拟点击的实例讲解
Nov 26 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
PHP文件读写操作之文件写入代码
2011/01/13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
2014/06/23 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
python让列表倒序输出的实例
2018/06/25 Python
python 爬取疫情数据的源码
2020/02/09 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
园长自我鉴定
2013/10/06 职场文书
新学期决心书
2014/03/11 职场文书
建议书标准格式
2014/03/12 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
教师个人教学反思
2016/02/23 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android