Python基础教程(微课版)ch11_第1页
Python基础教程(微课版)ch11_第2页
Python基础教程(微课版)ch11_第3页
Python基础教程(微课版)ch11_第4页
Python基础教程(微课版)ch11_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1页第11章多线程本章概述本章的学习目标主要内容第2页本章概述多进程和多线程是操作系统中的重要概念,主要是为了在同一时刻同时执行多个任务,以提高系统的吞吐量,提高资源利用率。多线程编程技术可以实现代码并行,优化处理能力,同时可以将代码划分为功能更小的模块,使代码的可重用性更好。本章介绍Python中的多线程编程。多线程一直是Python学习中的重点和难点,同学们需要反复实践和研究。第3页本章的学习目标了解进程和线程的概念,多线程和多进程的概念。了解Python中的线程模块。掌握_thread模块的使用。掌握threading模块的使用。掌握线程同步的方法。掌握线程优先级队列。了解线程和进程的比较。掌握Python多线程技术的应用。第4页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第5页11.1进程和线程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。有时候被称为重量级进程。线程(Thread,有时被称为轻量级进程)跟进程有些相似,不同的是所有线程运行在同一个进程中,共享运行环境。第6页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第7页11.2使用线程全局解释器锁退出线程Python的线程模块第8页全局解释器锁Python虚拟机的访问由全局解释器锁(GIL)控制,这个锁能保证同一时刻只有一个线程运行。在多线程环境中,Python虚拟机按以下方式执行:(1)设置GIL。(2)切换到一个线程运行。(3)运行指定数量的字节码指令或线程主动让出控制(可以调用time.sleep(0))。(4)把线程设置为睡眠状态。(5)解锁GIL。(6)再次重复以上所有步骤。第9页退出线程当一个线程结束计算,它就退出了。线程可以调用_thread.exit()等退出函数,也可以使用Python退出进程的标准方法(如sys.exit()或抛出一个SystemExit异常,不过不可以直接“杀掉”(kill)一个线程。不建议使用_thread模块。很明显的一个原因是,当主线程退出时,其他线程如果没有被清除就会退出。另一个模块Threading能确保所有“重要的”子线程都退出后,进程才会结束。第10页Python的线程模块Python提供了几个用于多线程编程的模块,包括_thread、threading和Queue等。_thread和threading模块允许程序员创建和管理线程。_thread模块提供了基本线程和锁的支持,threading提供了更高级别、功能更强的线程管理功能。Queue模块允许用户创建一个可以用于多个线程之间共享数据的队列数据结构。第11页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第12页11.3_thread模块start_new_thread()函数是thread模块的一个关键函数。Python中调用_thread模块中的start_new_thread()函数产生新线程。_thread的语法如下:_thread.start_new_thread(function,args[,kwargs])其中,function为线程函数;args为传递给线程函数的参数,必须是tuple类型;kwargs为可选参数。_thread模块除了产生线程外,还提供基本同步数据结构锁对象(lockobject,也叫原语锁、简单锁、互斥锁、互斥量、二值信号量)。同步原语与线程管理是密不可分的。第13页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第14页11.4threading模块threading模块不仅提供了Thread类,还提供了各种非常好用的同步机制。如表所示为threading模块里所有的对象。threading模块对象描述Thread表示一个线程的执行的对象Lock锁原语对象(跟thread模块里的锁对象相同)RLock可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)Condition条件变量对象能让一个线程停下来,等待其他线程满足了某个“条件”。如状态的改变或值的改变Event通用的条件变量。多个线程可以等待某个时间的发生,在事件发生后,所有的线程都被激活Semaphore为等待锁的线程提供一个类似“等候室”的结构BoundedSemaphore与Semaphore类似,只是它不允许超过初始值Timer与thread类似,只是它要等待一段时间后才开始运行第15页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第16页11.5线程同步使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquire和release方法之间。锁有两种状态——锁定和未锁定。第17页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第18页11.6Queue模块Queue模块可以用来进行线程间的通信,让各线程之间共享数据。Python的Queue模块提供了同步、线程安全的队列类,包括FIFO(先入先出)队列Queue、LIFO(后入先出)队列LifoQueue和优先级队列PriorityQueue。这些队列都实现了锁原语。能够在多线程中直接使用。可以使用队列实现线程间的同步。Queue模块中的常用方法如表所示。方法描述queue.qsize()返回队列的大小queue.empty()如果队列为空,返回True,反之Falsequeue.full()如果队列满了,返回True,反之False。queue.full与maxsize大小对应queue.get([block[,timeout]])获取队列,timeout等待时间queue.get_nowait()相当queue.get(False)queue.put(item)写入队列,timeout等待时间queue.put_nowait(item)相当queue.put(item,False)queue.task_done()在完成一项工作之后,queue.task_done()函数向任务已经完成的队列发送一个信号queue.join()实际上意味着等到队列为空,再执行别的操作第19页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第20页11.7线程与进程的比较要实现多任务,通常会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务。因此,在多任务环境下,通常是一个Master、多个Worker。如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。如果使用多线程实现Master-Worker,主线程就是Master,其他线程就是Worker。第21页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第22页11.8本章实战详见教材第23页主要内容11.1进程和线程11.2使用线程11.3_thread模块11.4threading模块11.5线程同步11.6Queue模块11.7线程与进程的比较11.8本章实战11.9本章小结第24页11.9本章小结

默认

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论