第11章 多线程编程 .pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第11章多线程编程;第11章多线程编程;主要内容;11.1进程与线程;

;程序(Programe)是对数据与操作描述的一段静态代码的有序集合,是应用程序执行的脚本。

进程(Process)是程序的一次执行过程,它对应从程序代码加载、执行到执行完毕的一个完整过程。

;线程是指进程中单一顺序的执行流。

一个进程可以拥有多个线程,线程是比进程更小的运行单位,是能独立运行的基本单位。;11.2Python与多线程;

;1.使用单线程执行程序示例

;2.使用多线程执行程序示例

;线程从创建到消亡的整个过程,可能会历经5种状态,分别是新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)、和消亡(Dead)

;threading和_thread是用于多线程编程的两个不同的模块。

在threading模块中定义了一个Thread类用于创建线程。threading.Thread类的常用方法如下表所示。

;Python中使用线程有两种方式:函数式启动线程,使用Thread类或其子类创建线程。

1.函数式启动线程

调用_thread模块中的start_new_thread()函数来创建新线程。;2.使用Thread类创建线程

直接使用Thread类的构造方法Thread()实例化一个线程对象。

;创建线程的基本步骤

(1)导入线程模块

(2)通过线程类创建进程对象

(3)启动线程执行任务

;应用Thread类的构造方法创建四个子线程示例

;自定义一个继承自threading.Thread的子类,在该子类中重写父类的__init__()方法和run()方法,再利用子类的构造方法创建线程。

run()方法用于实现线程的功能和业务逻辑。

;11.3线程同步;

;示例;线程同步就是在执行多线程任务时,一次只能有一个线程访问共享资源,其他线程只能等待,只有当该线程完成自己的执行后释放资源,另外的线程才可以进入。

Python提供了锁(Lock)机制实现线程间的同步。

;互斥锁只有两种状态:锁定(locked)和非锁定(unlocked)。

当某个线程需要更改共享数据时,它会先对共享数据上锁,将当前的资源转换为“锁定”状态,其他线程无法对被锁定的共享数据进行修改;

当线程执行结束后,它会解锁共享数据,将资源转换为“非锁定”状态,以便其他线程可以对资源上锁后进行修改。;Python中threading模块提供???一个Lock类,通过Lock类的构造方法可以创建一个互斥锁,语法格式如下。

Lock类中定义了两个重要方法acquire()和release(),分别用于锁定和释放共享资源。

;acquire()方法可以设置锁定共享数据的时长,其语法格式如下。

;用锁机制Lock改写例11-5。

;死锁是指两个或两个以上的线程在执行过程中,由于资源竞争或者彼此通信而造成的一种阻塞现象,若无外力作用,线程将无法继续执行,此时称系统处于死锁状态或系统产生了死锁。

在使用Lock对象给资源加锁时,若操作不当很容易造成死锁,常见的不当行为主要包括上锁与解锁的次数不匹配和两个线程各自持有一部分共享资源。

;死锁是指两个或两个以上的线程在执行过程中,由于资源竞争或者彼此通信而造成的一种阻塞现象,若无外力作用,线程将无法继续执行,此时称系统处于死锁状态或系统产生了死锁。

在使用Lock对象给资源加锁时,若操作不当很容易造成死锁,常见的不当行为主要包括上锁与解锁的次数不匹配和两个线程各自持有一部分共享资源。

;线程死锁现象示例。

;可重入锁(ReentrantLock),也称为递归锁,是一种支持同一个线程多次获取同一个锁的锁机制。

可重入锁RLock允许线程多次获得同一个锁,避免了死锁问题。

同一个线程获取同一个锁执行多少次获取锁的操作acquire,则在释放锁之前就需要相同次数的解锁操作release。

可重入锁需要关联持有锁的线程和计数器counter变量。

;通过RLock类的构造方法可以创建一个可重入锁。

RLock类的常用属性和方法如下表所示:

;利用RLock改写例11-7。

;应用案例:幸运抽奖大转盘;【分析】

(1)游戏界面设计:设计一个GUI窗口,各个奖项名称以标签组件Label显示,为了呈现抽奖时的转盘效果,奖项标签围成一个圈,放两个Button组件,用于触发“装盘”开始转动和停止的动作。标签和按钮组件的布局方式可以采用grid布局方式。

(2)抽奖转盘转动的效果实现方法:标签不动,但是让标签轮流改变背景色,只要将标签轮流改变背景色的切换频率加快,就能呈现转盘转动的视觉效果。

(3)业务逻辑:当单击“开始”按钮时,如果没有外界干预转盘就一直转下去,这个功能可以用一个while“死循环”实现,但是又要能

文档评论(0)

长情又很酷 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档