06 2018 档案
摘要:tornado-设计初衷 1. 追求小而精 2. epoll IO多路复用和协程 3. 支持WebSocket 4. 单线程程序(GIL限制,本身某种意义上不启动多进程就是单线程程序) # Python GIL介绍详情 tronado应用场景 1. 大量的http请求连接(大量的用户请求,要求并发性
阅读全文
摘要:进程 资源集合,调度和分配资源,说到进程就不得不提到线程,线程和进程是密不可分,进程申请了资源,但真正使用资源的是线程,其实本质上类似面向对象的思想,面向对象把数据和数据的操作封装在一个类中,进程把资源和对资源的操作封装在进程中,其实进程本质上是对资源的封装,那就比对进程和线程的区别来认识进程: 1
阅读全文
摘要:信号量 其实本质上是锁,Lock是单锁,信号量是指定多把锁,也就是说通过信号量指定多个数线程可以访问相同资源,一般情况下读操作可以有多个,但写操作同时只有一个 信号量模块 semaphore # 使用起来和普通锁没 什么区别,但这个是比锁更加粗粒度锁,锁的是线程 # 在线程实例前加锁,把锁传递进线程
阅读全文
摘要:GIL 全局解释器锁,这个锁是个粗粒度的锁,解释器层面上的锁,为了保证线程安全,同一时刻只允许一个线程执行,但这个锁并不能保存线程安全,因为GIL会释放掉的并且切换到另外一个线程上,不会完全占用,依据分配策略(时间片、执行字节码行数、IO操作)。GIL只能保证同一时刻同一CPU上只有一个线程执行,但
阅读全文
摘要:socket 整个计算机网络是由协议构成,想要通信必须遵守对应的协议,如Web中的http协议、传输协议TCP和UDP等等。在网络工程师的眼中,可能现在网络上的一切都是socket,一切皆socket,我们一般接触到的是应用层应用程序,本质上两个应用想通信,则必须通过socket实现通信,socke
阅读全文
摘要:yield 1. 函数执行的时候,找到yield关键字,则会标记这个函数,返回生成器对象 2. Python解释器会记录最近一次函数中yield位置 3. 生成器对象也是分配在栈堆上 4. 通过yield关键字,让程序员主动控制函数的运行状态,暂停函数还继续运行 5. 生成器可以return值 函数
阅读全文
摘要:iter 本质是for循环调用的实质,for循环通过调用这个函数返回可迭代对象生成器形式,开始迭代取值捕获StopIteration错误退出循环 for循环首先找__iter__方法,然后再找 __getitem__方法,如果都没找到则报错,对象不是可迭代对象 __iter__ 如果是自定义类生成的
阅读全文
摘要:通过另外一个类来描叙类变量的属性类型,这个是ORM实现的核心基础 给属性赋值会调用 __set__方法,访问属性则会调用 __get__方法,则可以获取字段的对象和其值,删除字段时候则调用 __delete__方法 北门吹雪: https://www.cnblogs.com/2bjiujiu/
阅读全文
摘要:__getattr__ 查找不到类属性的时候调用 __getattribute__ 无条件进入,无论是查找属性是否存在,能不重写则不去重写
阅读全文
摘要:__init__ 和 __new__区别 1. 从传递参数角度看,__init__第一个参数是实例本身, __new__传递的是类本身 2. 从执行顺序角度看,__new__方法执行在 __init__方法之前 3. 从功能角度看, __new__是控制对象实例过程,在对象生成之前就执行完毕, __
阅读全文
摘要:in 判断元素是否在序列中, 可以查看 in == is 区别 __contians__ 如果是对象则调用对象中的 __contains__方法
阅读全文
摘要:len() 求序列的长度 __len__ 对象中实现这个方法,则 len() 方法调用对象中 __len__方法
阅读全文
摘要:reversed 将序列反转,依次把最后的元素放到第一个位置,把第一元素放到最后一个位置,变成生成器对象 __reversed__ 对象中只要实现这个方法, reversed会调用对象中这个方法,从而实现对象中序列反转 经验: 1. reversed把序列反转,最后生成生成器对象 2. 自定义对象中
阅读全文
摘要:切片原理图(顾头不顾尾的正则原理) # [0:1] 其实只取到C, 取e则 [-1:], 如果步长为负数则倒过来取,从第几个往回取 对于可变数据类型,则可以通过切片实现数据添加修改, 如添加数据、替换数据、删除元素 切片协议 __getitem__ 类中实现这个方法,那么这个类实例的对象就可以进行切
阅读全文
摘要:+ 两边都是相同序列类型。拼接成一个新的序列 * 序列类型直接自我复制多少次,* 对象是int类型,支持 + 的序列支持 * 操作 += 就地加,两边都是序列类型,把后者可迭代类型依次添加到前者数据结构中,前提是前者是可变类型,不然两者都是相同类型直接拼接。 append 把内容当作一个整体对象添加
阅读全文
摘要:nametuple 是tuple扩展子类,命名元组,其实本质上简单类对象 其实本质上和下面方式一样 相关方法 1. _make 初始化赋值, 必须长度一致 2. _asdict 将nametuple对象转换为字典对象,是个有序字典 defaultdict 是dict的扩展类,访问字典的key如果没有
阅读全文
摘要:lambda 匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中 三元运算符 其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值 map 映射函数(依次把可迭代对象(可多个)中的值依次传递到函数中,然后返回生成器(长度以最短的为
阅读全文
摘要:# 开闭原则 对扩展开放,对修改关闭 面向对象 组织和构建代码逻辑的一种思路,面向对象是主流的一种编程范式而已,还有面向过程和面向函数编程范式,但在在Python中面向对象最为彻底,一切皆对象 与类相关的概念 类、实例 、类方法、类变量、实例方法、实例变量 类相关的关键字 class @ stari
阅读全文
摘要:枚举其实本质上是一种映射,为了满足对分类的可读性,在数据库中分类的存储一般为数字编号,而直接使用数字编号在代码中可阅读性太差,然后就产生了枚举类型 枚举类没有出现之前,则通过变量、字典和类的方式定义枚举类 1. 变量方式定义枚举 2. 字典方式定义枚举 3. 类方式定义枚举 # 都很好解决了枚举需求
阅读全文
摘要:Python中通过pass忽略代理架构错误,用来组织代码架构体系 函数相关关键字: def return * ** lambda 为何需要函数? 1. 功能重用,避免重复代码 2. 组织代码和隐藏细节 3. 可读性 函数整体架构 函数原数据有哪些? 1. 函数名 .__name__ 2. 函数注释
阅读全文
摘要:装饰器上下五千年和前世今生,这里我们始终要问,装饰器为何产生?装饰器产生解决了什么问题?什么样的需求推动了装饰器的产生?思考问题的时候,始终要问,为什么要这样,而不是那样或者其他样。这里我不先说,也不直接把装饰器的最终样子摆出来,而是说说装饰器发展过程,从这些过程中知道,不是技术推动技术的发展,而是
阅读全文
摘要:Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 all() 可迭代对象所有元素为True则返回True,否则返回False any() 可迭代对象所有元素为False则返回False,否则返回True ascii() 以ascii码依据转换为字符串,非a
阅读全文
摘要:time 时间处理模块,常用时间为东八区北京(上海)时间,在UTC标准时间上 +8 小时 获取时间戳 .time # 1970年1月1日00:00开始,到现在时间 获取本地时间 .localtime # 也可以传入时间戳转换为时间戳对应的时间 挂起线程多少秒,模拟IO堵塞 .sleep 格式化时间
阅读全文
摘要:random 生成随机变量 生成 [0, 1) 随机数 .random 生成[start, end] 随机数 .uniform 生成 [start, end] 区间随机整数 .randint 生成 (start, end) 区间随机整数 randrange 从序列中随机取一个值 choice 从序列
阅读全文