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使用xmlrpc实例讲解
Dec 17 Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
python中字符串内置函数的用法总结
Sep 13 Python
python将秒数转化为时间格式的实例
Sep 16 Python
Django 配置多站点多域名的实现步骤
May 17 Python
Django组件content-type使用方法详解
Jul 19 Python
简单了解python装饰器原理及使用方法
Dec 18 Python
Django与pyecharts结合的实例代码
May 13 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 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邮件专题
2006/10/09 PHP
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php中的三元运算符使用说明
2011/07/03 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
js获取单选框或复选框值及操作
2012/12/18 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
PassWord输入框代码分享
2016/06/07 Javascript
Angular的$http与$location
2016/12/26 Javascript
vue.js+Element实现表格里的增删改查
2017/01/18 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python脚本操作Excel实现批量替换功能
2019/11/20 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
国际贸易个人求职信范文
2014/01/04 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
计生个人工作总结
2015/02/28 职场文书
任命书标准格式
2015/03/02 职场文书
运动员入场词
2015/07/18 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript