目前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售票系统的全部叙述,希望大家喜欢。

时间: 2015-12-23

python线程创建对象_Python使用面向对象方式创建线程实现12306售票系统相关推荐

  1. python线程创建对象_python 多线程(一)

    (一) 线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程.当一个程序运行时,内部可能包含多个顺序执流,每个顺序执行流就是一个线程. 进程和线程 ...

  2. Java并发包——使用新的方式创建线程

    Java并发包--使用新的方式创建线程 摘要:本文主要学习了如何使用Java并发包中的类创建线程. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/ ...

  3. python学习第八天---用Django框架创建可重用注册登录系统

    python学习第八天---用Django框架创建可重用注册登录系统 实现的功能 项目开始前的整体规划 搭建环境完成基础配置 创建app 更改语言和时区 数据库表生成 启动开发服务器 浏览器访问,检测 ...

  4. 【头歌实训】Java高级特性 - 多线程基础(1)使用线程,使用 Callable 和 Future 创建线程

    任务描述 本关任务:通过 Callable 和 Future 来创建线程. 相关知识 从Java1.5版本开始,就提供了 Callable 和 Future 来创建线程,这种方式也是在Java程序员面 ...

  5. python线程创建对象_Python多线程编程基础:如何创建线程?

    Python标准库threading中的Thread类用来创建和管理线程对象,支持使用两种方法来创建线程: 1)直接使用Thread类实例化一个线程对象并传递一个可调用对象作为参数: 2)继承Thre ...

  6. python线程创建对象_python线程池菜鸟教程

    这篇文章主要为大家详细介绍了python线程池菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 线程池的概念是什 ...

  7. java匿名启动线程_使用匿名内部类:来创建线程的两种方式

    [Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...

  8. python中创建对象的七种方式

    Python语言提供了多种创建对象的方式,这里列出其中方式,比如下面有一个类: class Bar:def __init__(self,x):print(x)self.x=x 方式一: 传统方式构建, ...

  9. python线程唤醒_Python 并发编程(一)之线程

    常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程) 这些线程将由操作系统来全权管理.线程一旦启动,将独立执行直到 ...

最新文章

  1. SpringBoot学习之常用注解
  2. linux shell 变量 管道,linux下shell,变量,管道,重定向等基础知识及技巧
  3. Canada Cup 2016 C. Hidden Word 字符串构造
  4. 量化策略开发中的参数调优
  5. Ubuntu16.04 安装Spyder问题
  6. 信息系统项目管理师证书有什么用?
  7. 【css】关于pdf分页(page-break)
  8. QQ应用自动登录最小化功能
  9. Web前端开发的项目开发流程
  10. ArcCatalog基础操作
  11. halcon之屌炸天的变形匹配(1)
  12. 高数笔记(十七):二重积分的概念、性质与计算,三重积分的概念、性质与计算
  13. GPU视频压缩1—Flexible CTU-level parallel motion estimation by CPU and GPU pipeline for HEVC
  14. 机器学习实战案例—验证码(CAPTCHA)识别基于Logistic
  15. I2C中关于ACK和NACK的几点东西
  16. 差分近似图像导数算子之Sobel算子
  17. 给图像增加一种噪声,构造并利用至少两种高通滤波器实现频率域的滤波
  18. Linux 文件服务
  19. 建立live555海思编码推流服务
  20. 注册dll时返回0x80004005的解决方法

热门文章

  1. mysql收缩日志教程_MYSQL SERVER收缩日志文件实现方法
  2. 这两个实用的导航网站,推荐给你
  3. 怎样防止苹果系统更新_苹果更新IOS13.3系统步骤
  4. whl文件安装库和pip换源
  5. 华为android版本升级,截胡华为鸿蒙,安卓12登场!迎来3大升级,10家国产手机优先升级...
  6. 一套资金管理和交易策略规则
  7. python mkl 锐龙 cpu_自己动手,解开Matlab对AMD锐龙处理器性能封印
  8. Python蓝桥杯练习12——字母图形
  9. vue实现全屏登录视频背景并适配浏览器窗口大小
  10. 拯救pandas计划(16)——将DataFrame的奇偶列位置进行前后对调