查看每个cpu核使用情况

2018年6月03日 00:12

  • 运行top命令,然后按1
Tasks: 226 total,   1 running, 225 sleeping,   0 stopped,   0 zombie
%Cpu0  : 33.3 us, 47.8 sy,  0.0 ni, 11.9 id,  0.0 wa,  5.9 hi,  1.1 si,  0.0 st
%Cpu1  : 33.1 us, 48.5 sy,  0.0 ni, 11.8 id,  0.0 wa,  6.2 hi,  0.4 si,  0.0 st
KiB Mem :  4024788 total,   862968 free,  1832492 used,  1329328 buff/cache
KiB Swap:  4157436 total,  4157436 free,        0 used.  1849656 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                
  4882 root      20   0  955352 355904   4548 S 163.0  8.8   2:20.43 python                                                                                 
   717 root      20   0  243524  11020   9736 S   0.3  0.3   0:20.52 vmtoolsd  
 
淨空法師:如何看待赌博与怎样戒赌

 

 

评论(11) 阅读(1820)

服务接口,选择rpc还是http?

2018年6月02日 23:32

系统如果组件比较多,在做技术选型时,组件通信该选择rpc还是http呢?
有人说rpc性能好,有人偏向http,对此有些疑惑,有必要细细思维一下。
 
  • 从通信内容/功能上看

内容 rpc       http     
字符串 支持 支持
文件 可以支持 支持
对象(序列化) 支持 可以支持
 
http应用于web环境,rpc应用于分布式调度
从功能上看没有太大区别,很多情况下rpc与消息中间件结合通信实现分布式调度
 
  • 从用法上看

两者都是c/s结构,无太大区别
 
  • 从实现上看

类型 底层协议
rpc tcp(zerorpc)/http2(gRPC)
http http1.x/http2
 
  • 从性能上看

1. 听说rpc是长链接,http是三次握手。
长链接虽然,可以减少tcp开销,相对的它会导入新的缺点,是否会对连接数数量有限制呢?
 
2. 假如rpc的性能比http高,无非就是socket多连接了三次。如果http结合非阻塞io服务器(例如tornado),这三次连接开销真没啥消耗。
当然网络也会有一点消耗. 非阻塞io服务器可以将rpc与http的性能差距拉平
 
从链接开销上,比较性能问题,本就是错误,两者是在解决不同问题,所有没有必要在这个问题上纠结。请继续看下面
 
  • 从概念上看

rpc远程调用
http超文本传输协议
 
  • 该如何选择呢?

1. 思考这个问题,应该用最简单的方式,相信协议设计者,会选择最好方式来解决它面临的问题(毕竟协议代表着公认),我们只用关注它解决什么问题。
rpc解决什么问题呢?远程调用。"调用"属于程序内部之间。调用总不可能只传简单参数,会涉及到对象序列化,
这个对象在开发是代码总不会用两套吧,server与client很可能是在一起的属于一个组件.
 
2. 连接数不该是"调用"考虑的事。在创建一个全局连接后,不会再频繁创建连接. 如果rpc作为服务,频繁连接的场景不适合它
 
  • 总结

1.c与s关系
rpc远程调用,属于程序内部之间,c与s关系密切。
http,适合不同组件,c与s关系独立。
 
2.连接数
rpc叫调用,频繁连接的场景不适合它
http的应用的web环境,本就是频繁连接的场景
 
《寿康宝鉴》有声书
寿康宝鉴百话有声书(mp3)
 

评论(38) 阅读(5314)

python3.6编码错误unable to load the file system codec

2018年6月02日 20:09

  • 情况描述
在windows中安装python、virtualenv后,启动cmd界面,使用virtualenv创建运行环境出现错误,意思是加载不了系统编码
 
c:\python36\Scripts\virtualenv.exe test
Fatal Python error: Py_Initialize: unable to load the file system codec
  • 解决办法
将cmd编码改为utf-8
chcp 65001
 

Tags: python3
评论(154) 阅读(18536)

ldd查看依赖库

2018年6月02日 20:07

  • 查看依赖库
[root@localhost ~]# ldd /usr/bin/python
	linux-vdso.so.1 (0x00007ffcb7db2000)
	libpython2.7.so.1.0 => /lib64/libpython2.7.so.1.0 (0x00007ff75a7e2000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff75a5c3000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007ff75a3bf000)
	libutil.so.1 => /lib64/libutil.so.1 (0x00007ff75a1bc000)
	libm.so.6 => /lib64/libm.so.6 (0x00007ff759e67000)
	libc.so.6 => /lib64/libc.so.6 (0x00007ff759a82000)
	/lib64/ld-linux-x86-64.so.2 (0x00007ff75ae27000)

 

Tags: linux
评论(0) 阅读(1868)

改变命运的三个层次

2018年5月20日 18:48

人有念头所以有命运,改变念头就能改变命运。改变方法有三个层次。
 
  • 第一层,无念
 
人能做到无念,自然不会受命运束缚。属于圣人的层次,一般人做不到。
 
  • 第二层,一念代替一切念。
 
将念头集中在善念上,恶念生不出来,自然能改命运。如同考试时,念头集中在考试上,此时只有考试的念头,其它种种贪念都不会起来。但是考完之后,其它各种念头都出来。普通人无法长久保持这种状态。所以这也不是普通人能做到。
 
  • 第三层,加强正念,削弱邪念。
 
比如,有一种强大的坏习惯(抽烟、饮酒、赌博、等等...),一般人是改变环境,这是无用的。因为念头是根本原因,念头太强烈,改变环境根本无用。
只有加强与它相反的正念,正念产生正果,正念的力量越强,坏念升起时,正念能削弱它甚至消灭它,经过几年后,坏习惯自然而然就没有了。
 

评论(1) 阅读(1746)

zfill自动补0

2018年5月19日 17:14

python提供了zfill(zero fill)函数自动为字符串前面补0
>>> "5".zfill(2)  #2表示字符串宽度
'05'
 
《寿康宝鉴》有声书

 

评论(0) 阅读(1576)

iconv修改文件编码

2018年5月17日 11:21

  • 查看文件编码
➜  ~ file a.py
a.py: ASCII text
 
  • 编码转换
 
iconv a.py -f ascii -t utf-8 -o b.py --verbose

-f,from-coding 源文件编码
-t,to-coding  输出文件编码
-o 输出文件
 
大字符集转为小字符集,会有内容丢失,并且报错,如utf-8有中文时转为ascii
 
  • 查看已知字符集
iconv -l
 

 

Tags: linux
评论(0) 阅读(1289)

python常见编码错误集合

2018年5月17日 11:08

  • 错误1:变量加载到内存出现编码错误
文件内容
a="中国"
print a

#报错
➜  ~ python a.py
  File "a.py", line 1
SyntaxError: Non-ASCII character '\xe4' in file b.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
编译会读取变量a存到内存,因为包含中文,转化为str(ascii默认编码)报错
磁盘字节串utf-8-->无法转为内存字节串str(ascii)
 
  • 错误2:str直接encode报错
>>> sys.getdefaultencoding()
'ascii'
>>> a="中国"
>>> a.encode("gbk")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
>>> b=u"中国"
>>> b.encode("gbk")
'\xd6\xd0\xb9\xfa'
变量a的类型是str(utf-8字节串),会自动调用decode(默认编码ascii),转为unicode,再调encode
按照默认编码去decode变量utf-8编码字节串会报错
 
 
  • 错误3:编码相互转换报错
>>> "中国".decode("utf-8").encode("ascii")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> "中国".decode("utf-8").encode("gbk")
'\xd6\xd0\xb9\xfa'
>>> "a".decode("utf-8").encode("ascii")
'a'
 
ascii是utf-8的子集合,小集合转换大集合没有问题
大集合转为小集合就报错不支持
 
  • unicode不能再decode
>>> a = "中国"
>>> b = a.decode("utf-8")
>>> b
u'\u4e2d\u56fd'
>>> b.decode("utf-8")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
 
  • 总结
理解编码错误时,首先要判断str时以什么编码存放在内存中的,然后判断是否符合转换公式(str-(decode)->unicode-(encode)->str)。
判断方法,在python2中用len(str)或者bytes(str)可以判断,中文utf-8占3个字节,gbk占2个字节,ascii占一个字节。
 
印光大师十念法(胡小林主讲第1集)
此生必看的科学实验-水知道答案

 

评论(0) 阅读(1750)

python2字符串在内存中如何存放

2018年5月14日 14:07

  • str类型
存在磁盘上的格式与存在内存中格式一致,例如ascii编码占一个字节,utf-8编码中文3个字节,英文1个字节
gbk编码中文2个字节,英文一个字节
 
注意python2是不会自动转换成unicode格式
 
  • unicode类型
python2用来支持多语言,不同编码类型的str转换需要通过它
unicode表示字符串属于逻辑层面,字节串(str)表示存放格式属于物理层面,如ascii,utf-8,gbk属于字节串
 
  • ascii在内存中字节数(utf-8/gbk同样1个字节)
>>> sys.getsizeof("a")       #pyton做了包装,包含了其它数据内容
38
>>> sys.getsizeof("aa") - sys.getsizeof("a")   # 将字符重复一个求差值,可知单个字符长度
1
 
  • unicode在内存中长度(python2中4个字节)
>>> sys.getsizeof(u"aa") - sys.getsizeof(u"a")   #python2中4个字节、python3中2个字节
4
>>> sys.getsizeof(u"你你") - sys.getsizeof(u"你")
4
 
  • utf-8长度(3个字节)
>>> a1,a2="a".encode("utf-8"),"aa".encode("utf-8")
>>> sys.getsizeof(a2) - sys.getsizeof(a1)  #英文一个字节
1

>>> b1,b2="你".decode("utf-8").encode("utf-8"),"你你".decode("utf-8").encode("utf-8")
>>> sys.getsizeof(b2) - sys.getsizeof(b1)   #中文三个字节
3
同样的方法可以知道gbk英文一个字节,中文2个字节
 
 
印光大师十念法(胡小林主讲第1集)

 

Tags: python
评论(2) 阅读(1909)

gbk英文字符占几个字节

2018年5月14日 12:24

  • gbk英文字符占几个字节
➜  ~ python3
>>> bytes("你", "gbk")
b'\xc4\xe3'
>>> bytes("a", "gbk")
b'a'
>>> bytes("你", "utf-8")
b'\xe4\xbd\xa0'
>>> bytes("a", "utf-8")
b'a'
gbk中文2个字节,英文1个字节;utf-8中文3个字节,英文1个字节
 
  • 字符占几个字节
英文字母:
字节数 : 1;编码:GB2312
字节数 : 1;编码:GBK
字节数 : 1;编码:GB18030
字节数 : 1;编码:ISO-8859-1(latin-1)
字节数 : 1;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE


中文汉字:
字节数 : 2;编码:GB2312
字节数 : 2;编码:GBK
字节数 : 2;编码:GB18030
字节数 : 1;编码:ISO-8859-1(latin-1)
字节数 : 3;编码:UTF-8
字节数 : 4;编码:UTF-16
字节数 : 2;编码:UTF-16BE
字节数 : 2;编码:UTF-16LE
 
 
印光大师十念法(胡小林主讲第1集)

 

Tags: python
评论(1) 阅读(2623)