- 1、本文档共110页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第12章进程和线程;学习目标/Target;学习目标/Target;学习目标/Target;章节概述/Summary;目录/Contents;目录/Contents;进程概述;;;;;;;;12.1.2进程的状态;12.1.2进程的状态;12.1.2进程的状态;;1.父进程:创建新进程的进程被称为父进程。父进程通过调用特定的函数或命令来创建新的子进程。
2.子进程:由父进程创建的进程称为子进程。子进程是父进程的副本,包括父进程的代码、数据和资源。
3.主进程:主进程是在程序运行时由操作系统自动创建的第一个进程,它通常负责子进程的创建,管理和监控其他子进程的状态、运行情况和资源分配。主进程可以根据需要创建多个子进程,并在有需求的情况下与这些子进程进行通信和协作。;4.进程ID:每个进程在操作系统中都有唯一的标识符,称为进程ID。进程ID是一个非负整数,用于在系统中标识和管理进程。
5.前台进程:前台进程是当前用户正在与之交互的进程,它会占用终端或控制台的输入和输出。
6.后台进程:后台进程是在后台运行的进程,不会与用户进行直接交互。
7.守护进程:守护进程是在后台运行的进程,独立于终端会话。它通常用于在系统启动时执行一些需要持续运行的服务或任务,并且不会接受用户交互。守护进程会在父进程退出后继续运行。;进程的创建方式;;;;;;;;;;Process类表示进程,它提供了用于创建进程对象的构造方法Process(),该方法的语法格式如下:;12.2.2通过Process类创建进程;;12.2.2通过Process类创建进程;12.2.2通过Process类创建进程;;;通过Pool类的构造方法可以创建一个进程池对象,该方法的语法格式如下:;;;;通过一个示例演示如何通过继承Process类的方式创建子进程,该进程能够计算任务的耗时。首先定义一个继承自Process的类MyProcess,具体代码如下:;;通过一个案例演示如何通过apply()方法以阻塞的方式给进程池添加任务,示例代码如下。;进程间通信;;;;;;;使用队列实现两个进程间的通信,示例代码如下:;线程的概念;;;线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成,它不能独立拥有系统资源,但它可与同属一个进程的其他线程共享该进程所拥有的全部资源。
线程一般可分为以下几种类型:
主线程???程序启动时,操作系统会创建一个进程,与此同时会立即运行一个线程,该线程通常被称为主线程。主线程主要有两个作用,一个是生成其他子线程,另一个是在程序的最后执行关闭操作。
子线程:由主线程或者其他线程创建的线程,用于执行程序的具体任务。
守护线程(后台线程):守护线程是在后台为其他线程提供服务的线程,它独立于程序,不会因程序的终止而结束。当进程中只剩下守护线程时,进程直接退出。
前台线程:相对于守护线程而言,其他线程称为前台线程。;线程具有五个状态,分别是新建态、就绪态、运行态、阻塞态和消亡态,这些状态之间的转换过程如图所示。;12.4线程的概念;线程的基本操作;;;Python中可以直接通过Thread类的构造方法创建线程,该方法的语法格式如下:;通过Thread()方法创建的线程默认是前台线程,这种线程的特点是主线程会等待其执行结束后终止程序。例如,通过Thread类的构造方法创建前台线程,并为该线程指定要执行的任务函数,具体代码如下。;通过Thread类的构造方法创建线程时,还可以在构造方法中将daemon参数的值设置为True,这时便会创建后台线程,后台线程的特点是该线程与主线程同时运行,并且当所有非后台线程结束时会自动终止,即使该线程没有正常执行完任务。示例代码如下:;Python中可以自定义一个继承自Thread的子类创建线程。通过Thread子类中的构造方法创建线程时,需要重写run()方法,run()方法用于实现线程的功能与业务逻辑,以实现自定义线程的行为。例如,定义一个继承自Thread类的子类MyThread,在MyThread类中重写run()方法,具体代码如下:;通过MyThread类的构造方法创建线程对象,具体代码如下:;;;创建多个子线程,阻塞主线程,按照创建的顺序逐个执行完每个线程的任务后,最后再结束主线程,示例代码如下。;线程锁;;;假设有一个售票厅,共有100张火车票可供售卖。为提高效率,售票厅开设了两个窗口来同时售票,其中每个窗口可视为一个线程。每售出一张火车票后,系统会显示当前的剩余票数。然而,由于两个窗口同时修改同一份车票数据,这可能导致剩余票数的混乱。剩余票数混乱的场景如图所示。;;;;;假如在售卖火车票的案例中加入互斥锁,效果如图所示。;threading模块中提供了一个Lock类,
您可能关注的文档
- Python程序开发案例教程(第2版)课件 第4章 列表与元组.pptx
- Python程序开发案例教程(第2版)课件 第1章 开启Python学习之旅.pptx
- Python程序开发案例教程(第2版)课件 第2章 数字类型与字符串.pptx
- Python程序开发案例教程(第2版)课件 第3章 流程控制.pptx
- Python程序开发案例教程(第2版)课件 第5章 字典和集合.pptx
- Python程序开发案例教程(第2版)课件 第6章 函数.pptx
- Python程序开发案例教程(第2版)课件 第7章 类与面向对象.pptx
- Python程序开发案例教程(第2版)课件 第8章 模块.pptx
- Python程序开发案例教程(第2版)课件 第9章 文件与文件路径操作.pptx
- Python程序开发案例教程(第2版)课件 第10章 错误和异常.pptx
文档评论(0)