day30 并发编程

大文件上传思维逻辑

服务端

# 1.socket创建TCP服务
# 2.连接循环
# 3.通信循环
    接受固定长度的字典的报头
    解析获取字典数据的真实长度
    接受字典数据 解码 反序列化成字典
    从字典中获取文件大小 以及文件名等其他信息
# 4.循环接受文件数据
    文件操作(wb) 接受一行往文件中写入一行

客户端

# 1.socket客户端代码
# 2.利用os.listdir获取文件夹中所有的文件名
# 3.循环打印 供用户选择想要上传的文件
    用户选择是否符合要求
# 4.根据用户寻找及os.path.join方法拼接用户想要上传的文件绝对路径
# 5.根据文件路径获取文件大小os.path.getsize()
# 6.定义一个发送给服务端的字典
    {
    "file_name":用户选择的文件名,
    "file_size":文件大小,
    ...额外键值对消息
    }
# 7.制作字典的报头
    序列化 编码
# 8.发送字典的报头
# 9.发送字典数据
# 10.发文件
文件操作 一行行读取并发送

UDP的特点

#1 数据报协议(自己自带报头)
#2 基于UDP协议传输数据 数据是不安全的
#3 你就把UDP看成发短信 你只管发 对方收不收 看不看跟你一毛钱关系

简易版本的qq基于UDP开发

UDP跟TCP的区别

# 1.多个客户端可以实现并发的效果
# 2.服务端不存在 客户端也不会报错(sendto)
# 3.不会粘包
# 4.允许发空

异常处理

当你不确定某一些代码在什么样的情况下会出错
你可以考虑使用异常处理 (能尽量少用就尽量少用)
异常处理过多 会造成代码结构更加

异常的类型

# 1.语法错误
# 2.逻辑错误

try:
可能会出异常的代码块
except 异常的类型 as e: # 将异常的报错消息 赋值给e
print(e)
else:
try代码块没有任何异常发生才会触发else的运行
finally:
无论是否发生异常 都会执行finally内部代码

异常类型:Exception BaseException 万能异常

自定义异常
class MyError(BaseException):
def __init__(self,msg):
super().__init__()
self.msg = msg
def __str__(self)
return '%s'%self.msg

主动抛出异常
raise TypeError('')

断言 assert


socketserver
socketserver能够支持服务端的并发效果

并发编程

计算机发展史
进程理论
创建进程的两种方式(******)
进程方法join
进程对象及其他方法
进程间数据互相隔离
守护进程
互斥锁(*****)


多道技术

# 1.空间上的复用
多个程序共用一套计算机硬件

# 2.时间上的复用
切换+保存状态
    2.1 当一个程序遇到IO操作 操作系统会剥夺该程序的cpu执行权限(提高了cpu的利用率 并且也不影响程序的执行效率)
    2.2 当一个程序长时间占用cpu 操作系统也会剥夺该程序的cpu执行权限(降低了程序的执行效率)

并发与并行

# 并发:看起来像同时运行的就可以
# 并行:真正意义上的同时执行
单核的计算机能不能实现并行,但是可以实现并发

 程序与进程

# 程序:一坨代码
# 进程:正在运行的程序

同步与异步

同步异步:表示的是任务的提交方式
# 同步:任务提交之后 原地等待的任务的执行并拿到返回结果才走 期间不做任何事(程序层面的表现就是卡住了)
# 异步:任务提交之后 不再原地等待 而是继续执行下一行代码(结果是要的 但是是用过其他方式获取)

阻塞非阻塞

阻塞非阻塞:表示的程序的运行状态
# 阻塞:阻塞态
# 非阻塞:就绪态 运行态

强调:同步异步 阻塞非阻塞是两对概念 不能混为一谈

僵尸进程与孤儿进程

# 僵尸进程
父进程回收子进程资源的两种方式
1.join方法
2.父进程正常死亡
所有的进程都会步入僵尸进程


# 孤儿进程
子进程没死 父进程意外死亡
针对linux会有儿童福利院(init) 如果父进程意外死亡他所创建的子进程都会被福利院收养

守护进程


互斥锁

当多个进程操作同一份数据的时候 会造成数据的错乱
这个时候必须加锁处理
将并发变成串行
虽然降低了效率但是提高了数据的安全
注意:
1.锁不要轻易使用 容易造成死锁现象
2.只在处理数据的部分加锁 不要在全局加锁

锁必须在主进程中产生 交给子进程去使用 




FTP作业



猜你喜欢

转载自www.cnblogs.com/Ryan-Yuan/p/11327920.html
今日推荐