![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Python中级编程
文章平均质量分 82
恭喜你,学习完了学委编写的基础教程。
其实可以随便动手做点程序了。
中级编程会更难,更加抽象,加油。
雷学委
高级技术专家带路,事半功倍!多语言爱好者,目前主业大数据。做过创业项目/技术演讲/系统架构/内部培训。过来学习技术吧!
其他:
上海DevOpsDays技术讲师,发表主题演讲
华为云圆桌特邀嘉宾
展开
-
Python 内置队列 FIFO vs FILO 队列对比展示
正式的Python专栏第63篇,同学站住,别错过这个从0开始的文章!之前的多线程解决线程安全的时候,学委展示了两篇关于队列的 带你验收一款线程安全的队列 和使用队列改造转账场景线程安全问题对比一下FIFO 和 FILO首先队列这个库里面的queue.Queue类就是一个典型的先进先出队列。下面写了一些祝福语,使用Queue这个类来编写demo,开头创建一个队列对象q。后续不断判断队列是否空(q.empty()), 然后通过q.get()调用获取队列元素。写了三句祝福语,加上序号,先进先出队.原创 2022-04-30 21:03:17 · 2106 阅读 · 16 评论 -
Python 内置队列 queue快速一览
正式的Python专栏第62篇,同学站住,别错过这个从0开始的文章!之前的多线程解决线程安全的时候,学委展示了两篇关于队列的 带你验收一款线程安全的队列 和使用队列改造转账场景线程安全问题刚好这个库比较简单,不超过500行,挨着多线程,那就顺便把队列这个库。内置的队列都有哪些?打开源码,除了开头定义了空队列Empty异常和满队列异常Full异常。主要提供了两类队列:Queue及其衍生类 vs SimpleQueueQueue和它的衍生类LifoQueue:先进后出队列(LastInFi.原创 2022-04-03 05:00:00 · 1360 阅读 · 2 评论 -
Python的线程23 多线程threading一图总结
正式的Python专栏第61篇,同学站住,别错过这个从0开始的文章!拜个早年,今天阶段性总结一下多线程的二十几篇文章。多线程很丰富,但它只是复杂繁忙世界的小缩影。请看下图,学委精心制作的:图片总结了前面的多线程的多篇文章,概括了threading库里面的各个类的特点。初学者很容易在多线程这块’难住了‘,不过不怕,把学委这二十几篇多线程的分享(和代码)吃透。保证顺畅的使用多线程,更复杂的多线程问题,学委后面会再分享解析。稍微解释一下:主要分为4类:线程基础概念线程安全各种锁机制.原创 2022-03-19 15:01:07 · 1600 阅读 · 0 评论 -
Python的线程22 Threading.local() 线程的本地数据
正式的Python专栏第59篇,同学站住,别错过这个从0开始的文章!就快过年了,有在看文章的读者,可以继续给学委点赞,关注也不错!前面介绍了多线程(threading)库里面的很多类,好像把local这个整漏了,下面直接来。什么是线程的本地数据?线程的本地数据,就是专属于特定一个线程的数据。再看看怎么创建线程本地数据,创建方式为threading.local(),学委准备了如下代码:tldata = threading.local()tldata.slogan = "持续学习,持续开发,我.原创 2022-03-13 05:00:00 · 2607 阅读 · 4 评论 -
Python的线程21 Barrier类再次解析
正式的Python专栏第58篇,同学站住,别错过这个从0开始的文章!这篇继续介绍threading库里面的类,threading.Barrier类。这个类很好用,直接指定数值,通过调用其wait方法,就轻松实现多个线程同步等待。大家也看到学委之前用condition的实现(需要正确的使用notify和wait,还有加上wait(timeout) 来实现十个运动员等待)明显比Barrier类绕了一些。继续看看Barrier类再次阅读一下Barrier类的构造方法(如下),我们看到,它内部持有了C.原创 2022-03-09 05:00:00 · 1121 阅读 · 1 评论 -
Python的线程20 强迫症患者之Barrier类
正式的Python专栏第57篇,同学站住,别错过这个从0开始的文章!这篇继续介绍threading库里面的类,threading.Barrier类。很多人说它是一个栅栏,或者屏障,我更愿意说它是一个强迫症患者。怎么说呢?它跟参与的线程都杠上了,设置了几个,它就必然等待几个人同时准备好,才肯放行!什么是Barrier类Barrier类是一个多线程协调工具,它让多个持有Barrier的线程互相等待。 直到满足Barrier实例指定的n个线程(parties参数数值),也就是达到n个线程都调用了B.原创 2022-03-04 05:00:00 · 1112 阅读 · 0 评论 -
Python的线程19 拖延症患者Timer类
正式的Python专栏第56篇,同学站住,别错过这个从0开始的文章!多线程这一块写了快要20篇了,这篇来一个轻松一点点的。我们来学习一下Timer类,这个类很简单,但是很特别。每到新年,大家就会进行总结,跟之前立的flag进行自我复盘。Timer就是类似一个可以帮助你在立flag之后,到时间告诉你,该进行复盘了。什么是Timer准确点说,它是一个延迟执行的事件的单元(threading模块下的一个类),用来在指定时间后执行该事件。使用上非常简单:def do_something_afte.原创 2022-03-01 05:00:00 · 1025 阅读 · 0 评论 -
Python的线程17 Condition类,田径赛场上的主裁判
正式的Python专栏第54篇,同学站住,别错过这个从0开始的文章!前面介绍了死锁,Lock,Rlock,这篇我们介绍一下ConditionCondition 是什么?这个类跟Lock和Rlock类似,但是多了wait/notify/notify_all(Java里面对应的是notifyAll)等方法,这个搞过Java的同学就非常熟悉了。如下图,它的acquire和release方法沿用了传入的lock对象(或者默认的Rlock对象)。所以这两个熟悉的方法,可以参考前面分享的Lock和Rlo.原创 2022-02-23 05:00:00 · 1133 阅读 · 2 评论 -
Python的线程16 一分钟写个死锁,单身狗谈何爱情
正式的Python专栏第53篇,同学站住,别错过这个从0开始的文章!前面学委介绍Python的线程15 可重入锁RLock,文末提到了死锁。所以这篇补充一下死锁的概念死锁 是什么?想象一下,身边有哪些无法解开的问题?是不是有个问题想要跟对象讲道理,一开始好好聊,还能说明白。然后聊着聊着,对象反将一军:“你不够爱我了!(爱会消失。。。)”搞的一下子懵了,本来是要讨论谁不该干嘛干嘛的事情,就陷入了僵局。对,死锁就是这种感觉。这里不一样的是,讨论问题从两个人,变成了两个线程/进程(或者更多,多.原创 2022-02-19 14:43:27 · 1546 阅读 · 2 评论 -
Python的线程14 有界信号量,这是一个有底线的信号量
正式的Python专栏第51篇,同学站住,别错过这个从0开始的文章!前篇学委提出了Semaphore信号量来制作限流器的思路和一个简单的限流器实现。代码运行起来了,看起来没有错误。不过,细心的读者会发现,如果我们出现像下面的信号量使用方式:xuewei_semaphore.acquire() #获取信号量//do something.... xuewei_semaphore.release() #释放信号量#>>> xuewei_semaphore.release().原创 2022-02-08 05:30:00 · 1566 阅读 · 2 评论 -
Python的线程13 简易限流器实现
正式的Python专栏第50篇,同学站住,别错过这个从0开始的文章!前篇学委提出了Semaphore信号量来制作限流器的思路。简单总结就是:动态的release,保证任意时刻都有固定数量可用的信号量。我们通常会这样使用信号量xuewei_semaphore = threading.Semaphore(4) #申请信号量#在某个地方使用信号量xuewei_semaphore.acquire()//do something here....xuewei_semaphore.relea.原创 2022-01-28 05:00:00 · 3722 阅读 · 2 评论 -
Python的线程12 简易限流器
正式的Python专栏第49篇,同学站住,别错过这个从0开始的文章!前篇学委展示了Semaphore信号量,这个工具可以让开发者设置阀值,简单的控制并发的数量。不知道读者还记得前篇设置信号量为1的时候,三个运动员只有一个先跑了。因为一开始给了信号量为1,所以学委还没有喊完3/2/1,就有人抢跑了。好,拉回主题 - 限流器什么是限流器?大家记不记得经常坐地铁(早晚)高峰期的时候,在入口的地方就有工作人员搬了一下遮挡栏,每次就放而二三十人进入。一般4个地铁口,两个入。两个出,出口一般没有限流,.原创 2022-01-25 05:00:00 · 1848 阅读 · 2 评论 -
Python的线程10 使用Event保证多线程同时执行
正式的Python专栏第48篇,同学站住,别错过这个从0开始的文章!前面分享了threading.Event类,它维持了一个信号(True/False)状态。像田径跑道上蹲在起点的运动员,不分先后,同时听到枪响就开跑,用这个类来做很适合。模拟:发出一声枪响当然不是真的有枪响,而且代码调用Event类的对象实例的set函数。因为Event类的函数是线程安全的,所以我们可以把运动员看成一个一个的线程,并排在跑道起点。所以这个思路代码就有了for _ in range(n): def r.原创 2021-12-26 15:03:25 · 2241 阅读 · 23 评论 -
Python的线程09 认识Event信号
正式的Python专栏第47篇,同学站住,别错过这个从0开始的文章!前面分享了多篇文章的线程创建的代码,一个循环创建多个线程并启动,它们并不是保证它们同时开始做一个事情。怎么样才能保证,多个线程公平公正的竞争呢?就像田径跑道上蹲在起点的运动员,不分先后,同时听到枪响,就开跑呢?本文,我们先学习一下threading.Event类。Event 是什么写过很多Java应用的同学,我们谈到的Event通常都是一些指令性的消息,比如,转账10元,某某已关注, 而且创建事件后通常不会再进行修改。不过.原创 2021-12-23 05:30:00 · 704 阅读 · 17 评论 -
Python的线程08 使用队列来改造转账场景
正式的Python专栏第46篇,同学站住,别错过这个从0开始的文章!前篇我们验收(学习)了队列Queue,这次趁热学委展示一下使用队列解决转账场景的问题。再次看看转账场景的问题前面有两篇文章展示了转账反复读写amount,导致结果出错。xuewei_account = dict()xuewei_account['amount'] = 100# amount为负数即是转出金额def transfer(money): for i in range(100000): .原创 2021-12-21 05:00:00 · 565 阅读 · 13 评论 -
Python的线程07 带你验收一款线程安全的队列
正式的Python专栏第45篇,同学站住,别错过这个从0开始的文章!前面多篇文章详细讲解了线程和线程安全,以及一些程序多线程错误下的,线程安全改造。是否有一种神器,解决线程/并发的问题呢?有,它就是队列(Queue)什么是队列?像排队一样,从头到尾排成一排,还可以有人继续往后排队,这就是队列。这里学委想说的是Queue这个类, 它是queue这个内置模块内的一个类。import queueq = queue.Queue(5) #可以传入参数指定队列大小queue.Queue()# 不传.原创 2021-12-20 05:00:00 · 3308 阅读 · 2 评论 -
Python的线程06 认识线程安全 【文末送书】
正式的Python专栏第44篇,同学站住,别错过这个从0开始的文章!前面学委分享了5篇多线程的文章了,一开始写多线程程序好像非常简单。可是实际应用跟第4篇,第5篇的场景比较像,而且还更复杂。有没有简单点的方法进行多线程编程?这就是学委本文要提到的‘线程安全’了。什么是线程安全?线程安全,名字就非常直接,在多线程情况下是安全的,多线程操作上的安全。比如一个计算加法的函数,不管是一千个还是一万个线程,我们希望它执行的结果总是正确的,1+1 必须永远等于2, 而不是线程少的时候1+1 变成3或者.原创 2021-12-18 14:38:44 · 5248 阅读 · 24 评论 -
Python的线程05 解决共享变量问题举例
正式的Python专栏第43篇,同学站住,别错过这个从0开始的文章!前面学委分享了几篇多线程的文章,前面提到了银行转账这个场景,展示了一个比较耗时的转账操作。这篇继续转帐,下面展示一段程序,多个线程的操作都更改了amount变量导致运行结果不对的问题。前文说了转账问题下面展示另一种转账的方式:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/11/24 12:02 上午# @Author : LeiXueWei# @C.原创 2021-12-16 05:45:00 · 746 阅读 · 0 评论 -
Python的线程04 同步机制实际应用场景举例
正式的Python专栏第42篇,同学站住,别错过这个从0开始的文章!前面学委分享了几篇多线程的文章,说到了同步机制,好像还蛮简单的,加个锁就完事了。这次让我们来看看一个真实场景吧:银行转账先说说转账假设现在有一个xuewei的账号里面有 100W。然后有多个任务在转账,转入转出都是跟这个xuewei账号相关的。而且这些任务发生是随机的。我们先把上面的场景写成代码:xuewei_account = 100# amount为负数即是转出金额def transfer(money): .原创 2021-12-15 06:00:00 · 217 阅读 · 2 评论 -
Python的线程03 线程同步
正式的Python专栏第42篇,同学站住,别错过这个从0开始的文章!前面两篇文章介绍了线程概念和多线程程序的代码演示,但在多线程程序中,它们互相独立打印的时间却是错乱的!如下图,明明t-0 > t-1 > t-2 (按照线程创建时间早晚排列)。最后输出居然是t-1最落后。我们怎么样做避免错乱呢, 下面看看。线程同步多线程,就是多个独立的运行单位,同时执行同样的事情。多线程不是已经做到同时执行了吗?还需要同步干嘛?是的,线程是同时被调用执行了,但是每个线程之间互相独立,也互相竞.原创 2021-12-14 05:15:00 · 1330 阅读 · 17 评论 -
Python的线程02 多线程展示
正式的Python专栏第41篇,同学站住,别错过这个从0开始的文章!前面文章写线程的基础知识,这次我们看看多线程!什么多线程?多线程,就是多个独立的运行单位,同时执行同样的事情。想想一下,文章发布后同时被很多读者阅读,这些读者在做的事情‘阅读’就是一个一个的线程。多线程就是多个读者同时阅读这篇文章。重点是:同时有多个读者在做阅读这件事情。如果是多个读者,分时间阅读,最后任意时刻只有一个读者在阅读,虽然是多个读者,但还是单线程。我们再拿前面分享的代码:关注和点赞。def dianzan.原创 2021-12-12 14:25:51 · 1928 阅读 · 1 评论 -
Python的线程01 认识线程
正式的Python专栏第41篇,同学站住,别错过这个从0开始的文章!前面文章写了很多,都是比较基础的。这篇开始我们将进入中级编程。处理更加复杂事情。比如本文的线程,咱们先从基础知识入手!什么是线程?我们知道工人都是同时在工厂工作,复制各自的工作的。他们就是一个一个独立运行的单位!线程也是类似这样的一个独立的运行单位,多线程,就是多个独立的运行单位,同时执行同样的事情。简单这样理解,后面会进行对比。threading.Thread 类是Python中的线程类,它封装了线程的信息和一些同用的.原创 2021-12-10 08:44:37 · 2233 阅读 · 19 评论 -
Python面向对象编程05:收尾总结一下类和对象
正式的Python专栏第40篇,同学站住,别错过这个从0开始的文章!前篇学委展示分享了类的继承和重写,面向对象还有一些概念,继续跟上吧,这次总结一下!类和对象再次认识回顾类和对象,类就像是3D建模里面的模型数据,对象跟用这个3D模型使用3D打印出来的具体模型。类没有生命周期,因为你的代码写好了类,它就存在,并不因为被不被加载而存在!但是我们没有加载类到PYTHONPATH中,它不被找到!但是不代表它不存在!对象呢?仅存在于Python程序运行过程中,中间程序关闭了,对象就消失了。对象有生命.原创 2021-12-08 09:00:09 · 652 阅读 · 3 评论 -
Python面向对象编程04:重写object通用函数
正式的Python专栏第39篇,同学站住,别错过这个从0开始的文章!前篇学委展示分享了类的继承和重写,面向对象还有一些概念,继续跟上吧!Python Override重写就重新定义,在程序中就是覆盖父类的函数的这种行为。Override还能重写类的一些通用函数,它们是:__init____str____eq__这里手动写几个,因为我们双击object这个base class可以看到一系例的类的函数:学委准备了下面的代码:#!/usr/bin/env python# -*-.原创 2021-12-07 05:00:00 · 752 阅读 · 2 评论 -
Python面向对象编程03:类继承和其衍生术语
正式的Python专栏第38篇,同学站住,别错过这个从0开始的文章!前篇学委展示分享了面向对象编程和深度认识类的结构,最后稍微提到了继承。这次我们把继承和继承衍生的术语一并解释Python支持单继承,多继承趁着印象比较深,学委拿了前篇文章的代码稍作修改:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/11/15 11:58 下午# @Author : LeiXueWei# @CSDN/Juejin/Wechat: 雷.原创 2021-12-05 05:30:00 · 578 阅读 · 22 评论 -
Python面向对象编程02:深度认识类class
这次把类和对象的知识补充了一些(但是还有Python支持多继承,这跟Java是很大的区别!),有过半不是常见的。但是在写框架或者深度分析的时候,非常有用,务必过一过熟悉一下。学委写了十几年的Java了,但是写的这套Python教程非常务实,对基础编程有任何问题请查看相关文章。原创 2021-12-03 22:59:16 · 1723 阅读 · 29 评论 -
Python面向对象编程01:入门类和对象
> 正式的Python专栏第36篇,同学站住,别错过这个从0开始的文章!前面写了文件的读取和文件处理等其他函数,里面用到了os库。本来想分享os库,发现这个库可能对于初学者来说比较难,所以后面再等合适的时间谈谈,因为涉及了很多文件系统的操作,比较偏Linux运维。原创 2021-12-01 05:15:00 · 470 阅读 · 23 评论