![]()
1、验证用户合法性
# serve
def auth(conn):
secret_key = b'alexsb' # 密钥,自带,别人无法得知
rand_b = os.urandom(32) # 创建随机码
conn.send(rand_b) # 发送
obj = hmac.new(secret_key, rand_b) # 解析密钥
rest1 = obj.digest() # 解析得到的
ret2 = conn.recv(1024) # 接收
cmp_res = hmac.compare_digest(rest1, ret2) # 比较是否相同
return cmp_res
# client
import hmac
import socket
def auth(sk):
secret_key = b'alexsb'
rand_b = sk.recv(32)
obj = hmac.new(secret_key, rand_b)
res2 = obj.digest()
sk.send(res2)
2、进度条
def processBar(num, total):
rate = num / total #越来越大的值/总值
rate_num = int(rate * 100)
if rate_num == 100:
r = '\r%s>%d%%\n' % ('=' * rate_num, rate_num,)
else:
r = '\r%s>%d%%' % ('=' * rate_num, rate_num,)
sys.stdout.write(r)
sys.stdout
3、进程的三大状态:就绪、运行、阻塞
计算机中最小的资源分配单位
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。
而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
程序可以作为一种软件资料长期存在,而进程是有一定生命期的。 程序是永久的,进程是暂时的。
4、并发和并行
并行 : 并行是指两者同时执行(资源够用,比如三个线程,四核的CPU )
并发:是指资源有限的情况下,两者交替轮流使用资源,一般情况下无法感知到是交替使用的
5、同步异步和阻塞非阻塞
同步异步更关心的是消息通信机制
同步:有相关的依赖任务的时,只能等待该任务完成才能执行下一个任务,发出调用,没得到结果则调用不返回
异步:不需要等待被依赖任务的完成,也执行依赖任务,发出调用后直接返回调用,被调用者通过回调函数、状态等通知调用者
阻塞非阻塞关注的是程序在等待调用的结果(消息,返回值)时的状态
阻塞:调用结果返回之前,当前进程被“挂起”
非阻塞:调用者结果返回之前,该调用不会阻塞进程