python补充3
一单例模式
类:具体相同特征的一类事物,类似于模板
单例:常用的软件设计模式,用于设计一个类中只有一个实例且易于外界访问,可以对实例的个数控制并节约系统资源
运用场景:比如某个服务器程序的配置信息,它放在一个文件中,客户端通过一个类来读取配置文件的信息,在程序运行期间,很多地方
需要创建实例,使用单例模式可以很多的节省内存资源,尤其是配置文件内容很多的情况下
class Singleton(object):
__instance=None
def__init__(self):
pass
def__new__(cls,*args,**kwd):
if Singleton.__instance is None:
Singleton.__instance=object.__new__(cls,*args,**kwd)
return Singleton.__instance
二打印前一天的本地时间
import datetime
now=datetime.datetime.now()
print(now) #2018-08-13 09:58:00.700589
print(datetime.timedelta(seconds=1)) #0:00:01 timedelta表示的是时分秒
yes=now-datetime.timedelta(days=1)
print(yes.strftime('%Y-%m-%d')) #2018-08-12
三同步,异步,阻塞,非阻塞,并发,并行
同步:当一个进程发起一个函数(任务)调用的时候,一直等到函数(任务)完成,而进程继续处于激活状态
异步:当一个进程发起一个函数(任务)调用的时候,不会等函数返回,而是继续往下执行,函数返回的时候
通过状态,通知,事件等方式通知进程任务完成
阻塞和非阻塞针对的是进程和线程:阻塞是当请求不能满足的时候就将进程挂起,而非阻塞不会,
阻塞情况:例如 recv sleep accept input recvfrom等 并行:是指两者同时执行,利用了cpu的多核,从微观考虑,在一个精确的时间片刻,有不同的程序在执行
并发:指两者交替使用资源执行,从宏观考虑,在一个时间段上看出是同时执行的
异步非阻塞: 进程调用函数执行,不等待结果返回就执行其他的命令或函数
四 黏包
黏包现象出现在tcp协议中,而不出现在udp协议中,
tcp协议是面向连接的流式协议,发送端需要等缓冲区满才发送出去,这样数据小的话就会合到一块产生黏包
还有一种情况是:接收方不能及时收取缓冲区的包,造成多个包同时接收,产生黏包
udp协议是数据报协议,面向消息的,采用链式结构记录每一个到达的udp包,每个udp包的消息头中都有消息来源地址和端口信息
易于区分处理
总之:黏包现象的原因是接收方不知道消息之间的界限,不知道一次性提取多少字节的数据,
解决方法:提前告知要接收的数据信息,比如名称,大小等等
五管道和队列
管道:支持双向通信,用于进程之间的通信
队列:在管道的基础上加了锁,保证数据不会被进程重复取出
六打印九九乘法表
利用字符串的判断,拼接打印处理
print(''.join([str(a) +"*"+ str(b) +"="+ str(a * b) + str('\n' if a==b else '\t') for a in range(1, 10) for b in range(1, a+1)]))
七 select poll epoll模型
io多路复用:通过一种机制,可以监视多个文件描述符,一旦描述符就绪(读就绪和写就绪),能通知程序进行相应的读写操作。
I/O多路复用避免阻塞在io上,原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理.
select:通过select函数发出io请求后,线程阻塞,一直到数据准备完毕,然后才能把数据从核心空间拷贝到用户空间,同步阻塞方式
poll:通过poll函数发出IO请求后,线程阻塞,直到数据准备完毕,poll函数在pollfd中通过revents字段返回事件,然后线程把数据从核心空间拷贝到用户空间,
所以poll同样是同步阻塞方式,性能同select相比没有改进
epll:由专门的内核线程来不停地扫描fd列表,有结果后,把结果放到fd相关的链表中,用户线程只需要定期从该fd对应的链表中读取事件就可以了
属于异步非阻塞,例如nginx
八生成器表达式和列表推导式内含函数的区别
z = [lambda x:x*i for i in range(3)]
x = [o(2) for o in z]
print(x) #[4,4,4] for k in range(3):
i=k
print(i) ----> 2
z = (lambda x:x*i for i in range(3))
x = [o(2) for o in z]
print(x) #[0,2,4]
生产器表达式:一次读取一个值用来计算
列表推导式:全部读取完成在接着处理其他的函数
九 关于线程gevent的补丁---顶格写问题
在使用线程的时候往往要加入补丁:from gevent import monkey;monkey.patch_all()
它会把下面导入的所有的模块中的IO操作都打成一个包,gevent就能够认识这些IO了
这行必须顶格写,要不然下面出现i/o阻塞时,会夯住
其他 十 six模块
由一次查找到性能调优看到了six模块:
网址:http://tech.glowing.com/cn/python-web-performance-optimization/
众所周知 Python 2 和 Python 3 版本的分裂给 Python 开发者们带来了很大的烦恼,为了使代码同时兼容两个版本,往往要增加大量的代码。 于是 Six 出现了。正如它的介绍所说,它是一个专门用来兼容 Python 2 和 Python 3 的库。它解决了诸如 urllib 的部分方法不兼容, str 和 bytes 类型不兼容等“知名”问题。
import six,sys print(six.PY2) #python2结果为True
print(six.PY3) #python3结果为True sys.version_info[0] #PY2 = 2
sys.version_info[0] #PY3 = 3
sys.version_info[0:2] #PY34>= (3, 4)
body=b'hehe'
body1='hehe'
s=isinstance(body,six.binary_type)
s1=isinstance(body1,six.binary_type)
print(s) #True
print(s1) #False
python补充3的更多相关文章
- Python补充02 Python小技巧
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...
- Python补充06 Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...
- python补充最常见的内置函数
最常见的内置函数是: print("Hello World!") 数学运算 abs(-5) # 取绝对值,也就是5 round(2. ...
- Python补充05 字符串格式化 (%操作符)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输 ...
- Python补充03 Python内置函数清单
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...
- Python补充04 Python简史
原文:Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python是我喜欢的语言,简洁,优美,容易使用.前两天, ...
- 【Python 补充01】Python运算符
Python运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运算符 + - * / # 加减乘除 % # 取模(返回除 ...
- python补充知识点
1. 在python2中用xrange,在python3中直接使用range就好了 2. 常数 None在逻辑判断的时候指代False,其他方式不代表True或者False 3. for循环只作用域容 ...
- python 补充:join() , 基本数据类型的增删改查以及深浅拷贝
# join() join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. li = ["李李嘉诚", "麻花藤", "黄海海峰&q ...
随机推荐
- Hadoop数据分析实例:P2P借款人信用风险实时监控模型设计
Hadoop数据分析实例:P2P借款人信用风险实时监控模型设计 一提到hadoop相信熟悉IT领域或者经常关注互联网新闻的朋友都应该很熟悉了,当然,这种熟悉可能也只是听着名字耳熟,但并不知道它具体是什 ...
- 用shell通过jps -m来杀死进程
#!/bin/sh ### find pid jps=`jps -m` echo "$jps"|while read i do if[[ $i =~"agentTestT ...
- 魔豆love移植
其中love.sh代码如下: #!/bin/sh if [ ! -f "$app_conf" ]; then echo url=http://modou.ydjiao.com/ap ...
- java小程序(课堂作业03)
使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 思路:因为静态初始化块只运行一次,是一个很好的记录次数的方法,定义一 ...
- Windows Azure Web Site (19) Azure Web App链接到VSTS
<Windows Azure Platform 系列文章目录> 之前遇到一个问题,客户在海外使用 我参考了一下国内Azure China的文档:https://school.azure.c ...
- Intellij IDEA神器值得收藏的小技巧
概述 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜.出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intel ...
- 数据仓库专题(5)-如何构建主题域模型原则之站在巨人的肩上(二)NCR FS-LDM主题域模型划分
一.前言 分布式数据仓库模型的架构设计,受分布式技术的影响,很多有自己特色的地方,但是在概念模型和逻辑模型设计方面,还是有很多可以从传统数据仓库模型进行借鉴的地方.NCR FS-LDM数据模型是金融行 ...
- QT 5 初学1 多窗口切分-续
转载:omydocument 主窗口本身就带着菜单,工具栏,和状态栏,作为一个基本应用,这些都不用操心. 一个工具,需要把窗口切分成三部分,左边,右上,右下.左边显示选择的功能,右上是主窗口.右下作为 ...
- bzoj5010: [Fjoi2017]矩阵填数
Description 给定一个 h*w 的矩阵,矩阵的行编号从上到下依次为 1..h,列编号从左到右依次1..w.在这个矩阵中你需要在每 个格子中填入 1..m 中的某个数.给这个矩阵填数的时候有一 ...
- Java学习---异常处理
import java.util.Scanner; public class MyExceptionTest { public static void check(Square A) throws W ...