Python基础知识学习 第十二天 笔记
第十二节课
并发编程
概述
非并发
程序由单个步骤序列构成
包含独立子任务的程序执行性能低
并发
异步,高效
分解子任务`简化流程和逻辑
进程 process
一个程序的执行实例
每个进程有自己的地址空间、内存、数据栈以及辅助数据
线程 thread
同一进程内,可被并行激活的控制流
共享相同的上下文(空间地址,数据结构)
线程访问顺序差异会导致结果不一致(条件,race,condition)
python GIL 全局解释器锁
Global interpreter lock
python 代码由虚拟机(解释器主循环)控制
主循环同时只能有一个控制线程执行
多线程
_thread
特点
没有控制进程结束机制
只有一个同步原语(锁)
功能少于threading 模块
.start_new_thread(fuction,args,**kvargs=none) 开始线程
threading模块
.Thread线程类
构造
.Tread(target=目标函数,args=(参数,))
.start() 启动线程
.join() 要求主线程等待
.current_thread() 获取当前线程
threading.lock同步原语:锁
.acquire() 获得
.release() 释放
支持上下文操作 with lock: 可以不写上文两行代码
队列
queue模块
Queue FIFO
Queue(maxsize=0) 构造实例
.put(item, block=true ,timeout=none ) 放入数据项
.get(block=true ,timeout=none ) 获取数据项
LifoQueue LIFO
PriorityQueue 优先队列
.task_done() 声明当前队列任务处理完毕
.join() 队列所有项处理完毕前阻塞
multiprocessing 模块
充分运用多核,多cpu的计算能力,适用于计算密集型任务
concurrent.futures 模块
ThreadPoolExecutor 时间长
ProcessPoolExecutor 多线程 计算密集型时间短
装饰器
用于管理和增强函数和类行为的代码
提供一种在函数或类定义中插入自动运行代码的机制
特点
更明确的语法
更高的代码可维护性
更好的一致性
编写
函数基础
将函数付给变量
将函数作为参数传递
函数嵌套以及跨域访问 函数加括号返回结果不加括号返回函数
函数定义装饰器(比较通用)
类定义装饰器(有局限)
参数装饰器