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字符遍历的艺术
Sep 06 Python
用python写asp详细讲解
Dec 16 Python
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
浅述python中深浅拷贝原理
Sep 18 Python
Python 使用 docopt 解析json参数文件过程讲解
Aug 13 Python
python文件读写代码实例
Oct 21 Python
python list多级排序知识点总结
Oct 23 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
Python高并发解决方案实现过程详解
Jul 31 Python
4种非常实用的python内置数据结构
Apr 28 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/12/06 PHP
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
ajax+php控制所有后台函数调用
2015/07/15 PHP
PHP中empty和isset对于参数结构的判断及empty()和isset()的区别
2015/11/15 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
vue生命周期的探索
2019/04/03 Javascript
vue实现移动端图片上传功能
2019/12/23 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
2015/05/20 Python
Python对象转JSON字符串的方法
2016/04/27 Python
python实现C4.5决策树算法
2018/08/29 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
详解Django3中直接添加Websockets方式
2020/02/12 Python
基于Python fminunc 的替代方法
2020/02/29 Python
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
生活部的活动方案
2014/08/19 职场文书
2014年绿化工作总结
2014/12/09 职场文书
详解Python类和对象内容
2021/06/22 Python