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中的pass语句使用方法讲解
May 14 Python
python 的列表遍历删除实现代码
Apr 12 Python
python2.7到3.x迁移指南
Feb 01 Python
Python3中详解fabfile的编写
Jun 24 Python
在Python中实现替换字符串中的子串的示例
Oct 31 Python
python爬虫之验证码篇3-滑动验证码识别技术
Apr 11 Python
Python向excel中写入数据的方法
May 05 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
基于Python中Remove函数的用法讨论
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
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
详解ES6中的let命令
2020/04/05 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python基础教程之自定义函数介绍
2014/08/29 Python
python在不同层级目录import模块的方法
2016/01/31 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
高级方案规划工程师岗位职责
2013/11/29 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
大学团日活动总结书
2015/05/11 职场文书
发票退票证明
2015/06/24 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
Golang 实现WebSockets
2022/04/24 Golang