python学习并发编程
其他
2018-07-24 16:57:25
阅读次数: 0
一、并发编程理论基础
- 并发编程得应用:
- 网络应用:爬虫(直接应用并发编程)
- 网络架构django、flask、tornado 源码-并发编程
- socket server 源码-并发编程
- 计算机操作系统发展史
- 手工操作-读穿孔的纸带、用户独占全机、cpu等待手工操作、cpu利用不充分
- 批处理-磁带存储(联机批处理{一边写入磁带,一边从磁带读出计算}、脱机批处理、只能运行一个程序,遇到IO就等待闲置
- 多道程序系统
- 同时执行多个任务,遇到io就切换,
- 即空间隔离(多个程序运行),时空复用(IO切换)的特点
- 分时系统
- 同时执行多个任务,没有遇到IO也切换,固定时间片到了就切
- 时间片轮转
- 多路性、交互性、独立性、及时性
- 切会浪费cpu时间,降低了cpu效率,但提高了用户体验。
- 实时系统
- 通用操作系统:
- 操作系统分类:
- 操作系统的作用:
- 是一个协调、管理、和控制计算机硬件资源和软件资源的控制程序。【调度硬件资源、调用管理软件】
- 隐藏了丑陋的硬件调用接口,提供良好的抽象接口
- 管理、调度进程,并将多个进程对硬件的竞争变得有序
- I/O操作:(相对内存来说得)
- 输入【读到内存中】: input、f.read、accept、recv、connect
- 输出【从内存读出】:print、f.write、send、connect
- 文件操作/网络操作都是IO操作
- 异步:两个任务同时运行(并行)
- 同步:多个任务 串行 【按顺序执行】
- 阻塞:等待 input、accept、recv
- 非阻塞:不等待,直接执行
- 并行:多个任务同时执行【多个CPU在同时执行任务】
- 并发:只有一个CPU,交替执行多个任务【宏观上同时执行,实际是轮转】
- 程序:没有运行
- 进程:运行中得程序、计算机中最小得资源分配单元
- 进程调度:
- 多个进程(运行中得程序)在操作系统得控制下被CPU执行,去享用计算机资源
- 先来先服务调度算法
- 短作业优先
- 时间片轮转
- 多级反馈队列
- 进程调度得过程是不能随意被程序影响得
- 进程三大状态
- 就绪 程序开始运行,进入就绪队列,等待cpu分配时间
- 运行 执行进程,单个时间片内运行完成,就释放资源,没有左右完,就又自动切换到就绪队列等待下次得调度
- 阻塞 执行中得进程遇到事件入IO等导致无法执行,进入阻塞状态,解除后进入就绪队列等待进程调度
- 进程与父进程
- 进程 PID
- 父进程 PPID 负责回收一些子进程得资源后才关闭
二、python中的并发编程
- 包:multiprocessing
- 是python中操作、管理进程
- 创建进程、进程同步、进程池、进程之间数据共享
- python中的进程创建
- 对Windows来说创建子进程,是将主进程内存空间中的所有变量import子进程内存空间中,(import就会执行文件代码)
- windows平台创建子进程必须放在 if __name__ == '__main__' 下执行(不然就会循环创建子进程导致系统崩溃)
- 对Linux来说创建子进程,就是将主进程内存空间中所有复制过去,复制不会执行内存空间中的代码
- Linux平台就无所谓了,反正只是复制
- 创建进程:
- multiprocess.Process模块
- Process() 由该类实例化得到得对象,表示一个子进程中得任务(尚未启动)
- p = Process(group,target= func,agrs=('name',),kwargs={},name=)
- group 值默认始终为None
- target 表示调用对象
- args 调用对象得位置参数 元组!!!
- kwargs 调用对象得字典
- name为子进程得名称
- 注:必须用关键字方式指定参数、位置参数必须是元组格式,那怕是一个参数也要写成(n,)
- 方法:
- p.start() : 启动进程,调用操作系统的命令,传达要创建进程的申请,并调用子进程中的p.run()方法
- p.run(): 进程启动时运行的方法,其是真正去调用target指定的函数,自定义类,就需要自己定义run方法
- p.terminate(): 强制终止进程p
- p.is_alive(): 查看进程状态值,True表示运行中
- p.join(): 主线程等待子进程p运行结束后才运行 阻塞
- 实操:
转载自www.cnblogs.com/sunxiuwen/p/9360946.html