随笔分类 - Python3
摘要:之前我们学的都是阻塞IO模型,就是遇到IO,就阻塞,操作系统自动将CPU拿走给别的进程,等到IO有结果后,CPU再把执行权限拿回来,继续运行。 1.非阻塞IO 非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好, 此时会返回一个error。进程在返回之
阅读全文
摘要:1.并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) 1.该任务发生了阻塞 2.该任务计算的时间过长或有一个优先级更高的程序替代了它 第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果
阅读全文
摘要:1.线程队列 线程队列有三种:先进先出,后进先出,按优先级进出,具体如下: 1 import queue 2 3 # 先进先出 4 q = queue.Queue(3) 5 6 q.put(1) 7 q.put(2) 8 q.put(3) 9 # q.put(4) # 再放阻塞,等待队列消费 10
阅读全文
摘要:1.死锁 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程,如下就是死锁 1 from threading import Thread,Lock 2 im
阅读全文
摘要:先了解下CPU的简单运行原理: 它运行速度非常快,1s内可以运行成千上万次,一个核心可以把1s切分成成千上万个时间片段,这个核心确实同时只能运行一个任务;但是可以将多个任务交替执行,比如上一个时间片段内运行A任务,下个时间片段可以运行B任务,交替执行,因为时间片段很短,所以感觉就是同时在进行了。 再
阅读全文
摘要:进程只是用来把资源集中到一起(进程只是一个资源单位,或者说资源集合),而线程才是cpu上的执行单位。 公司=Cpu,部门=进程,开发人员=线程 部门隔离数据,财务部的财务数据不会给开发部门看,开发部门不是实际干活的单位,部门里的开发人员才干活,一个部门至少要有一个人才能干活,这就是主线程。 多线程(
阅读全文
摘要:进程:正在进行的一个过程或者说一个任务。而负责执行任务则是cpu。 程序仅仅只是一堆代码而已,而进程指的是程序的运行过程 1.开启进程的两种方式: 1 from multiprocessing import Process 2 import time 3 import os 4 5 # 方式一: 6
阅读全文
摘要:套接字这部分不得不强调下tcp协议,这里只讲五层协议。 应用层 应用程序告诉操作系统,要给某ip port 发送bytes数据 传输层 建立端口到端口的通信 网络层 引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址 数据链路层 单纯的电信号0和1无意义,定义了电信号的分组方式,将网络层
阅读全文
摘要:异常分为两类,可预知和不可预知。 错误发生的条件如果是可以预知的,此时应该用if判断去预防异常 错误发生的条件如果是不可预知的,此时应该用异常处理机制,try...except 自定义异常
阅读全文
摘要:一切皆对象 可以被引用 x = obj 可以当做参数传递给函数 可以当做函数的返回值return 可以当做容器的元素 l = [obj1,obj2] 用type产生类 # 类的三个特性 类名 基类(类的父类) 类的名称空间 # exec内置方法概述 # exec(str,globals,locals) exec在globals的作用域执行str代码,将执行产生的变量放到局...
阅读全文
摘要:非绑定方法 没有自动传值的功能 @staticmethod 绑定方法 绑定给谁就给谁调用,调用时会自动将调用者作为第一个参数传递给函数 1.绑定到对象的方法(不被任何装饰器装饰的函数) 2.绑定到类的方法 @classmethod 装饰的函数 class A: def __init__(self, name): self.name = name d...
阅读全文
摘要:组合 :对象1的属性是对象2,对象1就拥有了对象2的数据和函数属性,这就是组合。 # A类型和B类型没有共性,不可以继承,但是A有B的特性,比如A是人,B是家,A和B没有继承关系,但是人有家,A有B的关系,那么就可以把B的属性都给A用 class people: def __init__(self,name,age): self.name = name ...
阅读全文
摘要:隐藏属性 # 申明类时,数据属性或者函数属性,在属性名称前加上两个下划线,就实现了属性隐藏,但在python里不存在绝对的隐藏,它只是在申明的时候定义了它的调用方式。 class A: __country = "china" def __def(self): print(self.__country) a = A() print(a.__country)...
阅读全文
摘要:继承 人类 -> 男人类/女人类 派生 就是在父类的基础上,子类有自己的数据或方法属性,这就是派生 子类拥有父类以及祖类(父类的父类,没上线,可以一直往上找)的一切属性(数据/方法属性),属性查找顺序,从子类本身一直往上找 class a: def f1(self): print("from a f111") def f2(self): ...
阅读全文
摘要:面向过程概述 定义:指解决问题的步骤,第一步第二步一直走下去,直到解决问题。好比流水线,是一种机械式的思维。 优点:复杂问题流程化,进而简单化(一个复杂的问题,分成一个个小的步骤去实现,实现小的步骤将会非常简单) 缺点:一旦解决问题的步骤都确定好了后,不好扩展,好比如体制化后要改革非常难,改其中一个
阅读全文
摘要:urllib模块是python自带的,直接调用就好,用法如下: 相比较urllib模块,requests模块要简单很多,具体用法如下: 显而易见,requests模块要方便很多,建议大家使用requests模块。
阅读全文
摘要:1.flask模块介绍 在测试的过程中,往往会遇到功能受接口影响而导致测试无法正常进行,往往要等接口完成之后才能做功能测试,但这往往很托节奏。这个时候就可以考虑,将接口和功能剥离,分开测试,同时进行,保证项目进度。 问题是怎么分开呢?要研发先帮忙开发接口、调试好,然后测试?显然太low,python
阅读全文
摘要:re常用表达式规则 re Flags标识位 几个习题:
阅读全文
摘要:logging模块 excel模块 redis模块 mysql模块
阅读全文
摘要:hash在当前运行程序中,固定的被hash字符,hash后的值不会变,但是重启程序后又会变化 hash后的值,不可逆,不可反推,即无法破解,基于此特性,可以用作密码保存。 MD5讯息摘要演算法(MD5 Message-Digest Algorithm),密码杂凑函数,可产生一个128位的散列值(ha
阅读全文