相信很多新手同学才开始学习Python的时候,对于线程技术很是困惑,今天就给大家带来了Python新手入手线程技术的教程,希望可以帮到大家。

1.线程基础1.1.线程状态线程有5种状态,状态转换的过程如下图所示:

1.2.线程同步(锁)多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在数据不同步的问题。考虑这样一种情况:一个列表里所有元素都是0,线程”set”从后向前把所有元素改成1,而线程”print”负责从前往后读取列表并打印。那么,可能线程”set”开始改的时候,线程”print”便来打印列表了,输出就成了一半0一半1,这就是数据的不同步。为了避免这种情况,引入了锁的概念。

锁有两种状态——锁定和未锁定。每当一个线程比如”set”要访问共享数据时,必须先获得锁定;如果已经有别的线程比如”print”获得锁定了,那么就让线程”set”暂停,也就是同步阻塞;等到线程”print”访问完毕,释放锁以后,再让线程”set”继续。经过这样的处理,打印列表时要么全部输出0,要么全部输出1,不会再出现一半0一半1的尴尬场面。

线程与锁的交互如下图所示:

1.3.线程通信(条件变量)然而还有另外一种尴尬的情况:列表并不是一开始就有的;而是通过线程”create”创建的。如果”set”或者”print”在”create”还没有运行的时候就访问列表,将会出现一个异常。使用锁可以解决这个问题,但是”set”和”print”将需要一个无限循环——他们不知道”create”什么时候会运行,让”create”在运行后通知”set”和”print”显然是一个更好的解决方案。于是,引入了条件变量。

条件变量允许线程比如”set”和”print”在条件不满足的时候(列表为None时)等待,等到条件满足的时候(列表已经创建)发出一个通知,告诉”set”和”print”条件已经有了,你们该起床干活了;然后”set”和”print”才继续运行。

线程与条件变量的交互如下图所示:

1.4.线程运行和阻塞的状态转换最后看看线程运行和阻塞状态的转换。

阻塞有三种情况:

同步阻塞是指处于竞争锁定的状态,线程请求锁定时将进入这个状态,一旦成功获得锁定又恢复到运行状态;

等待阻塞是指等待其他线程通知的状态,线程获得条件锁定后,调用“等待”将进入这个状态,一旦其他线程发出通知,线程将进入同步阻塞状态,再次竞争条件锁定;

而其他阻塞是指调用time.sleep()、anotherthread.join()或等待IO时的阻塞,这个状态下线程不会释放已获得的锁定。

马哥学习交流群马哥教育-Python开发-1群335068227

马哥教育-Python开发-2群608459685

网上的python教程值不值得买_Python新人入手线程技术教程,值得收藏相关推荐

  1. python通过代理发送邮件_Python实现SMTP发送邮件详细教程

    简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的 ...

  2. python应用于期货_Python期货量化交易基础教程(17)

    16.14.异步任务: 16.14.1.使用协程任务: 函数create_task()用来创建协程任务,并将任务加入事件循环以实现异步并发. wait_update()不能用在协程中,若在协程中等待业 ...

  3. 爬虫python教程百度云_Python爬虫比较基础的教程视频百度云网盘下载

    Python爬虫比较基础的教程视频百度云网盘下载,目录如下,给编程的朋友学习吧,请大家支持正版! QQ截图20180719110859.jpg (12.41 KB, 下载次数: 27) 2018-7- ...

  4. python docx 字体大小_Python操作Word的入门教程

    Python操作Word的入门教程 前言 今天来介绍下,如何用 Python 来操作 Word. 再来介绍操作 Word 之前,先来说一个最近看书学到的法则,即 3W 法则. 3W:3W分别指 Wha ...

  5. python太占内存_Python占用的内存优化教程

    概述 如果程序处理的数据比较多.比较复杂,那么在程序运行的时候,会占用大量的内存,当内存占用到达一定的数值,程序就有可能被操作系统终止,特别是在限制程序所使用的内存大小的场景,更容易发生问题.下面我就 ...

  6. python中math函数_Python math模块 数学函数教程

    在Python基础教程中,大家都已经了解了Python有很多运算符可以进行一些数学运算,但是要处理复杂的问题是不是所有代码都要自己一行一行的来编写呢? 玩蛇网提醒大家,这个时候,最先想到的就应该是py ...

  7. python 自动化 mysql 部署_Python自动化管理Mysql数据库教程

    Python自动化管理Mysql数据库教程 发布时间:2020-05-28 11:14:31 来源:51CTO 阅读:238 作者:三月 下面一起来了解下Python自动化管理Mysql数据库教程,相 ...

  8. python怎么修改字体_python怎么改字体 | 基础教程

    关键词:字体 居中 颜色 对齐 配置 设置 方式 相关 斜体 详细内容 可以用 相关文章 中文网 可以根据 数值 # 1.先导入分别可指定单元格字体相关,颜色,和对齐方式的类from openpyxl ...

  9. python 开发视频播放网站_python开发微电影视频网站教程附源码

    做为一个合格的Pythoner,只掌握一个框架是不够,如果你有过其它Python框架(例如django)的使用经验,对比不同框架的特性来学习,你将收获更多 当前信息若含有黄赌毒等违法违规不良内容,请点 ...

最新文章

  1. python3 next()_Python3 File next() 方法 - Python 3 基础教程
  2. 微生物分类学研究利器:模式微生物基因组数据库
  3. OkHttpClient源码分析(一)—— 同步、异步请求分析和Dispatcher的任务调度
  4. redis:RDM连接阿里云redis服务器
  5. 创新学习对象1-陕西省网络与系统安全重点实验室研究员的李光夏老师
  6. 2019阿里云开年Hi购季新用户分会场全攻略!
  7. scala使用reduce和fold方法遍历集合的所有元素
  8. 【Mysql】Mysql数据表区分大小写问题解决方案
  9. ios::sync_with_stdio(true);
  10. 计算机网络---IP数据报组成计及IP模块工作流程
  11. QTcpSocket使用QDataStream发送和保存图片文件
  12. html5 过渡时间,CSS3 对过渡(transition)进行调速以及延时
  13. 如何完成dedecms外部数据库调用|跨数据库数据调用
  14. java Web应用配置log4j日志记录
  15. OpenDaylight风头正劲,华三通信在其中大显身手
  16. android 文件转base64 base64字符串转文件 语音留言及语音播放
  17. Redfish 验证工具: Redfish Service Validator (OData CSDL)
  18. 当前电子计算机发展的局限性,工程测量技术发展现状与趋势
  19. CAD异常闪退的原因
  20. 对比测评3款BI分析⼯具,还是它最香!

热门文章

  1. MIT霸气护学生:你换导师,我替你买单!
  2. 图文详解什么是快速排序
  3. 牛逼了!这个私藏的前端 IDE 插件,撸码 6 的飞起,编程效率提高 30 倍!
  4. Scrapy框架的入门使用
  5. mongodb和python交互
  6. python中的counter()、elements()、most_common()和subtract()函数的用法
  7. 网络工程师_想要记录下来的一些题_2
  8. 笔记 | PyTorch安装及入门教程
  9. 新手必会的 9 个 Python 技巧!
  10. 【OpenCV 4开发详解】图像直方图绘制