![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 60
勇敢的打工人海励
这个作者很懒,什么都没留下…
展开
-
Python单例模式
【代码】Python单例模式。原创 2024-04-14 22:36:14 · 484 阅读 · 0 评论 -
python协程之实现原理(一)
1、协程也可以称为微线程,是一种用户态内的上下文切换技术,通过一个线程实现代码块相互切换执行。原创 2022-09-16 14:01:26 · 406 阅读 · 0 评论 -
python多进程系列(五)进程池
4、线程是由子线程完成这个回调函数。5、进程是由主线程完成这个回调函数。1、获取当前进程id。原创 2022-08-22 16:22:36 · 1200 阅读 · 0 评论 -
python多进程系列(三)数据共享
1、p.start(): 当前进程准备就绪,等待被CPU调度(工作单元其实是进程中的线程)p.daemon=False:设置为非守护进程,主进程等待子进程都执行完毕,主进程才结束。p.daemon=True:设置为守护进程,主进程执行完毕,子进程也会自动关闭。2、p.join(): 等待当前进程的任务执行完成后再向下执行。3、p.daemon=布尔值,守护进程(必须放在start之前)4、获取cpu核心数。...原创 2022-08-17 14:14:07 · 981 阅读 · 0 评论 -
python多进程系列(二)多进程模式
3、拷贝锁:如果锁在外面是锁定状态,拷贝到子进程的时候锁依然是锁定状态,但是是被子进程的主进程获取到的。2、运行之前会先创建一个什么都没有的进程,再创建进程的时候会根据模板创建一个子线程,按需传参。2、在内部创建python解释器,让该解释器再去运行你的代码,只传必要参数,按需传参。2、拷贝父进程的所有东西,当做子线程去执行,父进程有的在子进程都有。1、 不支持文件对象和线程锁等传参。1、不支持文件对象和线程锁等传参。1、支持文件对象和线程锁等传参。...原创 2022-08-15 14:38:17 · 476 阅读 · 0 评论 -
python多进程系列(一)(multiprocessing)
3、python中通过进程可以利用CPU多核优势,计算密集型操作适合使用多进程。2、一个进程中可以有多个进程,同一个进程中的线程共享资源。1、进程是计算机中资源分配的最小单元。原创 2022-08-13 14:21:30 · 237 阅读 · 0 评论 -
python多线程系列—线程池ThreadPoolExecutor(八)
由于线程任务会在新线程中以异步方式执行,因此,线程执行的函数相当于一个“将来完成”的任务,所以 Python 使用 Future 来代表。当系统中包含有大量的并发线程时,会导致系统性能急剧下降,甚至导致 Python 解释器崩溃,而线程池的最大线程数参数可以控制系统中并发线程的数量不超过此数。1、线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它。2、当该函数执行结束后,该线程并不会死亡,而是再次返回到线程池中变成空闲状态,在线程池等待任务执行。..原创 2022-08-11 14:26:44 · 3049 阅读 · 3 评论 -
python多线程系列—信号量(七)
3、每次调用acquare方法都会使内部计数器减一,一旦计数器为负的,则acquare方法会被阻塞,直到其他线程调用release方法,使信号量内部计数器值为正。2、Semaphore内部维护一个计数器,该计数器的值= 初始值+release-acquare的值。1、信号量也是一种锁,主要用在保护有限的资源,常在多线程中控制获取资源的线程数量。2、 sem.acquire() 每启动一个线程,可用线程数量就会减1。3、 sem.release() 完成后,就释放,可用线程数加1。......原创 2022-08-10 16:12:41 · 603 阅读 · 0 评论 -
python多线程系列—Event对象(六)
1、Event对象set()方法可以设置Event对象内部的信号标志为True,并通知所有处于等待阻塞状态的线程恢复运行状态。1、threading.Event 事件对象 用于线程之间的简单通信,一个线程发出事件信号,其他线程等待该信号。5、Event对象内部信号标识为False,wait()方法将阻塞线程一致等待至超时,或者内部信号为真才返回。信号标识为False,线程进入等待状,等到下一个线程将信号标识修改为True,等待的线程将恢复执行。3、Event的isSet()方法用来判断内部信号的标识状态。.原创 2022-08-08 13:54:01 · 298 阅读 · 0 评论 -
python多线程系列—Queue对象(五)
8、Queue.task_done() 在完成一项工作之后,使用Queue.task_done()方法可以向队列发送一。9、Queue.join() 实际上意味着等到队列中所有的任务(数据)执行完毕之后,再往下,否则一直。7、Queue.put_nowait(item) 相当Queue.put(item, False)注意点:join()是判断的依据,不单单指的是队列中没有数据,数据get出去之后,要使。6、Queue.get_nowait() 相当Queue.get(False)...原创 2022-08-05 14:54:22 · 1923 阅读 · 0 评论 -
python多线程系列—condition对象(四)
条件变量总是与某种类型的锁对象(Lock/RLock)相关联,锁对象可以通过参数传入或默认自动创建。3、notify() 和 notify_all() 方法并不会释放锁,因此被唤醒的线程不会立即从 wait() 方法返回,而是等其他线程释放锁后,调用 wait() 的线程重新竞争获得锁后才能继续。2、调用 wait() 方法会阻塞线程并释放锁,然后直到超时或被其他线程调用 notify() 或 notify_all() 方法唤醒,一旦被唤醒,wait() 方法将重新请求获取到锁后才能返回。...原创 2022-08-04 14:53:04 · 245 阅读 · 0 评论 -
python多线程系列—Lock锁(三)
3、线程安全是指某个函数,函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序正确完成。2、线程锁释放的两种情况:等待(IO)导致python解释器锁释放,线程执行时长达到指定的阈值0.005秒。由于线程的执行随时会发生切换,造成了不可预料的结果,出现线程不安全。1、一个进程中可以有多个线程,且线程共享所有进程中的资源。2、多个线程同时操作一个东西,可能会导致数据混乱的情况。1、RLock是递归锁,支持锁多次【推荐使用】1、使用线程锁Lock解决线程安全问题。账户余额: -200。..原创 2022-08-04 14:42:13 · 1935 阅读 · 1 评论 -
RSA 非对称加密之分段解密
前言:在上一篇文章我们讲到了加密与分段加密,这篇文章我们接着来看解密与分段解密。一、非对称解密需要用到哪些库rsapip install rsa==4.8base64python 自带无需安装二、非对称解密步骤加载私钥预加密计算解密模值解密/非对称解密三、分对称解密步骤详解加载私钥方式一:#写死在py文件中import rsaimport base64privkey = """-----BEGIN RSA PRIVATE KEY-----MIIBOwIBAA原创 2022-05-17 18:08:31 · 736 阅读 · 0 评论 -
python 多线程系列 (二)
前言:上一篇文章我们讲了多线程的使用场景,通过一个简单的例子了解了多线程在IO密集型任务中确实能提高代码执行效率,接下来我们聊一聊多线程的创建方式。原创 2022-07-11 14:06:21 · 174 阅读 · 0 评论 -
python 多线程系列 (一)
前言:上vip课的时候每次讲到框架的执行,就会有好学的同学问用多线程怎么执行,然后我每次都会说在测开课程会详细讲解,这并不是套路,因为如果你不理解多线程,不清楚什么时候该用什么时候不该用,就会适得其反。今天我们就来聊一聊多线程这个烫手的山芋。1、动态类型语言,边解释边执行。2、GIL锁无法使用多核CPU并发执行。1、全局解释器锁(Global Interpreter Lock),是计算机程序设计语言计时器用于同步线程的一种机制,它使得任何时刻仅有一个线程在执行。即使在多核CPU上,使用GIL的解释器也只原创 2022-07-11 14:05:35 · 185 阅读 · 0 评论 -
如何在 docker hub 分享自己的镜像
前言:前几天vip课讲了如何创建配置jenkins容器,怕大家踩坑,我提前打好了jenkins镜像,直接让大家通过命令去拉取镜像就可以了。然而,很多好学的同学来问这个是怎么操作的。今天就来聊一聊,怎么讲自己打好的镜像上传到docer hub。1、注册过程就不写了,大家都是高手了,给个地址吧2、注册地址:https://hub.docker.com/signup1、更新yum源sudo yum update2、yum安装gcc相关包yum -y install gccyum -y install g原创 2022-07-11 14:04:40 · 331 阅读 · 0 评论 -
RSA 非对称加密之 PKCS8 格式秘钥
前言:前两篇博客写了RSA非对称加密的PKCS1格式秘钥的加密与解密,后面收到很多同学来问自己公司用的是PKCS8格式的秘钥,要如何加密解密。今天咱们就来解决这个问题。一、前期准备工作1、安装第三方库pip install pycryptodome2、将公钥,私钥分别存入.pem的文件公钥文件内容如下:私钥文件内容如下:二、秘钥加载方式方式一:读取.pem文件方式二:秘钥作为参数传递三、分对称加密与解密四、总结1、企业常用非对称秘钥格式PKCS1和PKCS82、PKCS1格式秘钥和PKCS8格式原创 2022-07-11 14:03:05 · 3991 阅读 · 0 评论 -
RSA 非对称加密之分段加密(PKCS1)
前言:在我们vip课的练手项目中涉及到了非对称加密,上课讲了但是部分同学还是不太理解,今天就写个博客来聊一聊非对称加密,希望对大家有帮助。一、如何区分对称加密还是非对称加密对称加密算法在加密和解密时使用的是同一个秘钥;非对称加密算法需要两个密钥来进行加密和解密,公钥(public key)和私钥(private key),公钥用于加密私钥用于解密;二、非对称加密需要使用哪些库rsapip install rsa==4.8base64python自带无需安装三、非对称加密步骤生成原创 2022-05-17 18:07:26 · 1558 阅读 · 0 评论 -
python元类
一、前言在学习python过程中想必大家都会去看源码,看源码的过程中会看到一些元类,但是看起来感觉很吃力看不懂,那是因为我们对元类不够了解。今天我们就来聊一聊python元类,看看元类到底是何方神圣。二、必要知识储备在讲元类之前我们得先搞清楚类和对象的概念以及类的创建过程,这个至关重要,这取决于我们是否能真正理解和正确使用元类。类和对象概念1、类:用来描述具有相同的属性和方法的对象的集合(抽象)2、对象:类的实体就是对象(具体)传统方式创建类1、代码演示class Demo: de原创 2022-05-17 17:54:03 · 53 阅读 · 0 评论 -
selenium 模拟鼠标操作
前言:我们在做web自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息,这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用selenium做web自动化的时候如何来操作鼠标。鼠标操作,我们可以使用selenium的ActionChains类来实现,我们先来认识一下这个类。一、ActionChains类常用方法click_and_hold(on_element=None) :点击鼠标左键,不松开context_click(on_element=None):点击原创 2022-03-18 16:56:25 · 1920 阅读 · 0 评论 -
jenkins+docker 实现主从模式
前言:jenkins主从模式想必大家都不陌生,大家在学习过程中为了学习方便都在自己本地搭建了jenkins环境,然后通过javaweb方式实现,对于docker下实现主从模式大家好像兴趣挺大。今天就通过这篇文章给大家讲讲怎么玩,希望对大家有帮助。二、环境准备准备一台Linux服务器(云服务器、自建Linux服务器都可以)在Linux服务器上安装docker拉个jenkins镜像下来,再启动一个jenkins容器docker中把这个镜像jenkins/ssh-slave拉下来(jenkins提供的原创 2022-03-18 16:54:56 · 204 阅读 · 0 评论 -
VMware 安装 Centos7 步骤图解
一、前提条件:windows电脑需要开启CPU虚拟化,具体机型步骤大同小异,大致步骤如下:进入BIOS后,找到Cpu Configuration 中的VirtuallizationTechnology选项;在VirtuallizationTechnology上按下回车键把Disabled改为Enabled,最后按F10选择Save保存,重启电脑就可以设置成功了。二. 安装VMwarevmware workstation下载官网:https://www.vmware.com/cn/produc原创 2022-03-18 16:54:26 · 3986 阅读 · 2 评论 -
python shutil 模块操作文件和目录
一、文件操作copy功能:复制文件格式:shutil.copy(‘来源文件’,‘目标地址’)返回值:复制之后的路径copy2功能:复制文件,保留元数据格式:shutil.copy2(‘来源文件’,‘目标地址’)返回值:复制之后的路径copyfileobj()将一个文件的内容拷贝的另外一个文件当中格式:shutil.copyfileobj(open(来源文件,‘r’),open(‘目标文件’,‘w’))返回值:无copyfile()功能:将一个文件的内容拷贝的另外一个文件当中格原创 2022-03-18 16:54:00 · 576 阅读 · 0 评论 -
python 下 json 数据提取神器 jsonpath 详解
一、什么是jsonpathJsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript、Python、PHP 和 Java。二、特点只能提取json格式的数据提取后的数据类型与原数据类型一致三、安装pip install jsonpath四、常用原字符原字符描述$表示根元素@当前元素. or []子元素…递归搜索(不管当前路径,搜索符合条件的数据)*通配符,表示所原创 2022-03-18 16:53:23 · 3331 阅读 · 0 评论 -
python私有属性
class Dog : __age = 20 #类私有属性 def __init__(self) : self . __name = "老王" #实例私有属性。原创 2022-03-17 15:59:32 · 198 阅读 · 0 评论 -
python实例属性
前言:在学习类和对象的时候类属性和实例属性是绕不开的,上一篇文章讲了类属性,接下来我们就讲一下实例属性,希望这篇博客对大家有帮助。一、实例属性的定义定义在类的初始化函数(def __init__())中的变量就叫实例属性class Dog: def __init__(self,age): #此处的age需要在类实例化的时候传进来 self.name = "老王" #实例属性,写死的方式定义 self.age = age #实例属性,通过类初始化参数定义原创 2022-03-17 15:59:15 · 2431 阅读 · 0 评论 -
python 类属性
前言:很多同学在学习类和对象的时候,对类属性一直不理解,内部访问外部访问就给绕晕了,属性的修改更是云里雾里,今天我们就来讲一下,希望这篇博客对大家有帮助。一、类属性的定义定义在类中且在方法外的变量,称之为类属性。class TestDemo: # 此处的name这个变量就叫类属性 name = "老王"二、类属性的访问类属性的访问分为:类内部访问、类外部访问类内部访问class TestDemo: # 此处的name这个变量就叫类属性 nam原创 2022-03-17 15:58:33 · 6497 阅读 · 0 评论 -
HTTPS请求过程图解
一、HTTPS加密过程概念HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。CA(Certificat原创 2022-03-17 15:57:39 · 5129 阅读 · 0 评论 -
TCP 三次握手与四次挥手详解
一、TCP三次握手图解三次握手过程详解第一次握手:1、【客户端】向【服务端】发送连接请求报文,标记ACK=1, SYN=1,客户端序列号seq=x,客户端进入等待状态。第二次握手:1、【服务端】收到请求报文,将收到的报文缓存起来,缓存客户端seq=x3、【服务端】向【客户端】发送确认报文,生成一个【服务端】seq=y,标记ACK=1,SYN=1,【服务端】自己的序列号seq=y,确认序列号ACK_Number=x+1,发送给【客户端】第三次握手:1、【客户端】收到服原创 2022-03-17 15:57:14 · 155 阅读 · 0 评论 -
TCP 报文详解
一、TCP报文格式二、字段详解第一行:源端口和目的端口字段TCP源端口(Source Port):源计算机上的应用程序的端口号,占16 位(bit)。TCP目的端口(Destination Port):目标计算机的应用程序端口号,占16 位(bit)。第二行:序列号字段CP序列号(Sequence Number):占(32bit)它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个原创 2022-03-17 15:56:39 · 16119 阅读 · 2 评论 -
Python 使用 ini&yaml 配置文件
前言配置文件常用的有2种,第一种是*.ini文件,实际上*.ini文件是Initialization file的缩写,即为初始化文件,是Windows系统配置文件所采用的存储格式,统管Windows的各项配置,用户可以通过修改对应的*.ini文件来实现不同的初始化配置(仅专业人士操作)第二种是yaml文件,YML文件格式是YAML (YAML Aint Markup Language)编写的文件格式,YAML是一种直观的能够被电脑识别的的数据数据序列化格式那么问题来了,我们python自动化测试的过原创 2022-03-17 15:55:54 · 480 阅读 · 0 评论 -
python OS 模块常用方法详解
1、返回文件路径os.path.dirname(__file__)返回当前运行文件所在目录的绝对路径os.getcwd()返回当前进程的工作目录2、返回指定文件的绝对路径os.path.abspath(path)import osprint(os.path.abspath(‘demo01.py’))输出: D:\ningMengClass\demoProiect01\day01\demo01.py3、路径拼接os.path.join(path1[, path2[, ...]原创 2022-03-17 15:55:17 · 315 阅读 · 0 评论 -
python global 关键字
背景很多同学对global关键字的使用不太明白,今天就写篇文章给大家梳理一下。首先讲到global关键字,必须要明白变量的作用域,我们就从变量作用域开始讲。变量作用域全局变量:函数外部定义的变量,整个py文件都能使用局部变量:函数内部定义的变量,仅函数内部使用global关键字作用:将局部变量变成全局变量使用场景:需要跨函数使用变量的时候使用语法:使用的时候要先声明再赋值global variable_namevariable_name = 'values'使用举例使用全局变量原创 2022-03-17 15:53:59 · 287 阅读 · 0 评论 -
python 错误重试用它就够了
python 错误重试用它就够了一、安装pip install tenacity二、使用使用规则同一个参数,多个值用|(或),+(与)进行组合使用不同参数之间,只有组合使用,通过关键字参数传参即可@retry()【常用】【无条件重试】,只要抛出异常就会重试,直到执行不抛异常from tenacity import *一直重试@retry()def test_demo():print(‘执行test_demo’)raise Exception(‘手动抛出异常’)t原创 2022-03-07 15:50:15 · 222 阅读 · 0 评论 -
正则表达式常用方法
前言:作为测试工程师,在工作中经常需要处理字符串,比如自动化测试过程中,在参数关联的时候就需要去响应结果中提取一些全局参数。如果参数是规则的json数据,我们可以使用jsonpath提取,如果参数为不规则的字符串,这个时候正则表达式便是最好的选择。一提到正则很多同学第一反应是很复杂,实际上正则功能很强大,但是对于我们测试测试工程师而言,我们只需要掌握一些常见的用法即可。下面我么就来看一下正则表达式有哪些常用的方法。一、正则表达式作用匹配指定规则的字符串二、常用方法findall():RE匹配原创 2022-03-07 15:39:43 · 16338 阅读 · 0 评论 -
python递归
背景在VIP课程讲完函数之后布置了一个课后作业,刚好这个作业涉及到了函数的递归相关知识,课堂上由于时间关系只是提了一嘴并没有细讲,要得到正确答案很简单,拿出来运行一遍自然就知道答案是A,但是这背后的逻辑很多同学并不清楚。实际上这个题涉及到函数递归的概念现在就给大家来做一个解析。练习以下代码输出结果为?A 10 B24 C 7 D 1def Foo(x): if (x==1): return 1 else:原创 2022-03-07 15:39:17 · 320 阅读 · 0 评论 -
10 分钟带你了解鉴权那些事
前言:鉴权是自动化测试路上的拦路虎,相信大部分同学都深有体会,今天我们就讲一讲这个鉴权到底是怎么回事。一、什么是鉴权,为什么要鉴权鉴权:是指是指验证用户是否拥有访问系统的权利。为什么要鉴权:对用户进行鉴权,防止非法用户占用网络资源,非法用户接入网络,被骗取关键信息。本次只讲目前企业常用session+cookie、token鉴权二. 鉴权方式HTTP Basic AuthenticationOAuth(开发授权)session+cookietoken三. session+c原创 2022-03-07 15:38:09 · 1306 阅读 · 0 评论 -
python if __name__ == ‘__main__‘ 你真的知道吗
一、if __name__ == '__main__'是什么是程序执行入口二、__name__与__main__是什么关系1、举例新建test01.pydef test01(): print('执行test01.py的test01函数') print('test01.py中__name__ 的值:',__name__)if __name__ == '__main__': test01()运行test01.py文件输出:执行test01.py的test01函数原创 2022-03-07 15:37:37 · 67 阅读 · 0 评论 -
python 常用高阶函数
python常用高阶函数常用高阶函数zip函数zip压缩:将多个可迭代对象对应索引的值组成一个元素,以最短的元素为准zip解压:压缩的反向过程代码演示list2=[1,2,3]list3=[4,5,6,7]result=list(zip(list2,list3))print(result)输出: [(1, 4), (2, 5), (3, 6)]print(list(zip(*result)))输出: [(1, 2, 3), (4, 5, 6)]enumerate(ite原创 2022-03-07 15:37:16 · 69 阅读 · 0 评论 -
python 运算符 & 字符串
python运算符&字符串一、运算符算术运算加、减、乘除10/3 (得到浮点数)10//3(取整除 - 向下取接近商的整数)幂运算(x**y)幂 - 返回x的y次幂取余/取模(%)print(10%3)1取模 - 返回除法的余数赋值运算=:简单的赋值运算符拓展知识+=:加法赋值运算符-=:减法赋值运算符*=:乘法赋值运算符/=:除法赋值运算符%=:取模赋值运算符**=:幂赋值运算符//=:取整除赋值运算符num原创 2022-03-07 15:36:44 · 469 阅读 · 0 评论