《嵌入式人工智能技术应用》课件 1.2-线程的调用_第1页
《嵌入式人工智能技术应用》课件 1.2-线程的调用_第2页
《嵌入式人工智能技术应用》课件 1.2-线程的调用_第3页
《嵌入式人工智能技术应用》课件 1.2-线程的调用_第4页
《嵌入式人工智能技术应用》课件 1.2-线程的调用_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

项目一使用OpenCV实现人脸检测嵌入式人工智能技术应用线程的调用任务二职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用了解线程原理;能够编写自定义线程类并进行调试。能使用Thread方法实例化线程;能使用实例化线程的start方法启动线程;能使用标志位退出线程;能使用自定义类继承Thread实例化线程。职业能力目标01知识目标技能目标职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用

本实验将实现用线程类和继承线程类两种方式启动线程,并执行线程任务。任务描述任务要求使用Thread方法实例化线程;使用实例化线程的start方法启动线程;使用标志位退出线程;使用自定义类继承Thread实例化线程。任务描述与要求02职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务分析谈谈线程和进程之间的关系,他们有什么区别?回忆一下Thread类的几种常用方法?任务分析与计划03任务计划表项目名称使用OpenCV实现人脸检测任务名称线程的调用计划方式自主设计计划要求请用5个计划步骤来完整描述出如何完成本次任务序号任务计划1

2

3

4

5

通过上面的思考,你是否对本任务要完成的工作有所了解?让我们一起来制订完成本次任务的实施计划吧!任务分析与计划03职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08线程的调用04知识储备线程threading库23进程1进程04进程指正在运行的程序。每一个进程提供执行程序所需的所有资源。每个还要有至少一个线程,因为每一个进程启动时都会最先产生一个线程,即主线程,然后主线程可以再创建其他的子线程。进程04

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。

进程的概念进程04狭义定义:进程是正在运行的程序的实例(aninstanceofacomputerprogramthatisbeingexecuted)。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。进程的定义进程04进程的状态1、三态模型一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态:(1)运行(running)态:进程占有处理器正在运行;(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行;(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。进程04进程的状态1、五态模型在一个实际的系统里进程的状态及其转换比上节叙述的复杂一些,例如,引入专门的新建态(new)和终止态(exit)。线程04知识储备进程21threading库3线程是操作系统能够进行运算调度的最小单位,是进程中的实际执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程中可以包含多个线程,可以称之为多线程程序。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,

Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。04线程思考一下,针对多任务我们该怎么减少计算时间?在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有以下属性:1)轻型实体;2)独立调度和分派的基本单位;3)可并发执行;4)共享进程资源。04线程线程的特点1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见;2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性;3)调度和切换:线程上下文切换比进程上下文切换要快得多;4)在多线程OS中,进程不是一个可执行的实体。04线程与进程的区别线程04知识储备进程21threading库3threading库04

进程有可以拥有多个线程,所以threading库提供了管理多个线程执行的API,允许程序在同一个进程空间并发地运行多个操作。

threading库是python的多线程库,利用threading库我们可以轻松实现多线程任务。Python的标准库提供了两个模块:

_thread

threading

_thread是低级模块,threading是高级模块,对_thread进行了封装。

绝大多数情况下,我们只需要使用threading这个高级模块。

threading模块中最核心的内容是Thread这个类。

创建Thread对象,然后执行线程,每个Thread对象代表一个线程,每个线程可以让程序处理不同的任务,这就是多线程编程。04threading库04threading库线程对象递归锁对象锁对象栅栏对象事件对象定时器对象threading模块中包含了关于线程操作的丰富功能threading.Thread(group,target=None,name=None,args=(),kwargs={},daemon=None)职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用启动线程的第一种方式2初识线程2105启动线程的第二种方式3初识线程05importthreadingimporttime进程是由若干线程组成的,一个进程至少有一个线程。多任务可以由多进程完成,也可以由一个进程内的多线程完成,每条线程并行执行不同的任务。由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的PosixThread,而不是模拟出来的线程。Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。threading模块中最核心的内容是Thread这个类。创建Thread对象,然后执行线程,每个Thread对象代表一个线程,每个线程可以让程序处理不同的任务,这就是多线程编程。启动线程的第一种方式2初识线程2105启动线程的第二种方式32线程退出1创建自定义函数启动线程的第一种方式05启动线程的第一种方式第一种方式:创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行。即直接创建Thread对象。函数可以通过threading.Thread(target)方法传递进Thread对象里,进而启动线程。threading.Thread(target):用于创建线程。参数说明:target:是线程函数变量参数,用于传入函数参数。启动线程的第一种方式05defVideo():print("这是一个线程")1.创建自定义函数(1)创建函数Video()t=threading.Thread(target=Video)(2)实例化线程t.start()(3)启动线程启动线程的第一种方式05working=TruedefVideo():whileworking:print("这是一个线程")time.sleep(2)print("线程已退出")t=threading.Thread(target=Video)t.start()2.线程退出threading模块并没有提供停止线程的方法,一旦线程对象调用start()方法后,只能等到对应的方法函数运行完毕,线程才能停止。如果线程中有循环的话,线程将会一直执行,直到循环结束,再运行循环后的语句。因此如果需要提前退出线程,即要先退出循环,一般的方法就是循环地判断一个标志位working,一旦标志位到达到预定的值,就退出循环。这样就能做到退出线程了。设置一个标志位变量working,初始值赋为True。定义了函数Video(),当标志位working为True时,该函数将循环打印。将函数Video()作为参数传入threading.Thread中实例化一个Thread对象,赋值为t。working=False启动线程的第一种方式2初识线程2105启动线程的第二种方式3启动线程的第二种方式05第二种方式:直接从Thread继承,创建一个新的class,把线程执行的代码放到这个新的class里。即编写一个自定义类继承Thread,然后复写run()方法,在run()方法中编写任务处理代码,然后创建这个Thread的子类。将函数封装成线程类,便于线程的调用与停止,大多用于这种方式来启动线程,属于面向对象编程。self:Python中就规定,函数的第一个参数,就必须是实例对象本身,并且建议,约定俗成,把其名字写为self,以self为前缀的变量都可供类中的所有方法使用;def__init__(self):在实例化类时定义变量;super:函数是用于调用父类(超类)的一个方法。这里表示继承线程类threading.Thread。defrun(self):把要执行的代码写到run函数里面,线程在创建后,通过.start()会直接运行run函数;退出线程的方式:在类中定义标志位,通过编写stop函数来控制标志位,达到退出循环。这样就能做到退出线程了。defstop(self):线程停止函数,用于控制标志位变量,从而达到控制线程。启动线程的第二种方式05classvideoThread(threading.Thread):def__init__(self):super(videoThread,self).__init__()self.working=True#循环标志位

defrun(self):#start()后运行run函数

whileself.working:print("这是一个线程")time.sleep(2)defstop(self):self.working=Falseprint("退出线程")(1)定义线程类a=videoThread()(2)实例化线程类a.start()(3)启动线程a.stop()(4)关闭线程职业能力目标01任务描述与要求02任务分析与计划03知识储备04任务实施05任务检查与评价06任务小结07任务拓展08任务二线程的调用任务检查与评价06序号评价内容评价标准分值得分1知识运用(20%)掌握相关理论知识,理解本次任务要求,制定详细计划,计划条理清晰,逻辑正确(20分)20分

理解相关理论知识,能根据本次任务要求、制定合理计划(15分)了解相关理论知识,有制定计划(10分)无制定计划(0分)2专业技能(40%)完成线程第一种启动方式、线程第二种启动方式。(40分)40分

完成线程第一种启动方式。(20分)没有线程第一种启动

温馨提示

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

评论

0/150

提交评论