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抓取网页内容示例分享
Feb 24 Python
python中正则的使用指南
Dec 04 Python
Python语言的变量认识及操作方法
Feb 11 Python
tensorflow学习笔记之简单的神经网络训练和测试
Apr 15 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
5行Python代码实现图像分割的步骤详解
May 25 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
python如何导出微信公众号文章方法详解
Aug 31 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
TensorFlow低版本代码自动升级为1.0版本
Feb 20 Python
Python自然语言处理之切分算法详解
Apr 25 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 获取本机外网/公网IP的代码
2010/05/09 PHP
php删除数组元素示例分享
2014/02/17 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP变量赋值、代入给JavaScript中的变量
2015/06/29 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
详解node child_process模块学习笔记
2018/01/24 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
Less 安装及基本用法
2018/05/05 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
JavaScript 面向对象基础简单示例
2019/10/02 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python上下文管理器全实例详解
2019/11/12 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
销售员求职个人的自我评价
2014/02/19 职场文书
生物学专业求职信
2014/07/23 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL