Python学习笔记-4
并发编程
概述
-
非并发
- 程序由单个步骤序列构成
- 包含独立子任务的程序执行性能低
-
并发
- 异步、高效
- 分解子任务、简化流程与逻辑
-
进程 process
- 一个程序的执行实例
- 每个进程有自己的地址空间、内存、数据栈及辅助数据
-
线程 thread
-
同一进程内,可被并行激活的控制流
-
共享相同上下文(空间地址、数据结构)
-
特点
- 便于信息共享和通信
- 线程访问顺序差异会导致结果不一致(条件 race condition)
-
-
Python GIL 全局解释器锁
- Global Interpreter Lock
- Python 代码由虚拟机(解释器主循环)控制
- 主循环同时只能有一个控制线程执行
多线程
-
_thread
-
特点
- 没有控制进程结束机制
- 只有一个同步原语(锁)
- 功能少于 threading模块
-
.start_new_thread(function,arg,**kwargs=None) 开始线程
-
-
threading 模块
-
.Thread 线程类
-
构造
- .Thread(target = 目标函数,args = (参数,))
- 自定义Thread派生类,重写run方法逻辑
-
.start() 启动线程
-
.join() 要求主线程等待
-
.name 线程名称
-
-
.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) 获取数据项
- .task_done() 声明当前队列任务处理完毕
- .join() 队列所有项处理完毕前阻塞
-
LifoQueue LIFO
-
PriorityQueue 优先队列
-
multiprocessing 模块
- 充分运用多核、多CPU的计算能力,适用于计算密集型任务
concurrent.futures 模块
- ThreadPoolExecutor
- ProcessPoolExecutor
装饰器
概述
-
用于管理和增强函数和类行为的代码
-
提供一种在函数或类定义中插入自动运行代码的机制
-
特点
- 更明确的语法
- 更高的代码可维护性
- 更好的一致性
编写
-
函数基础
- 将函数赋给变量
- 将函数作为参数传递
- 函数嵌套及跨域访问
-
函数定义装饰器
-
类定义装饰器
推荐定义装饰函数,因为装饰类容易出错
-
装饰器参数
IDE配置
虚拟环境
SQLite
动态类型
- NULL
- INTEGER
- REAL
- TEXT
- BLOB
文件导出
读取csv 、Excel
连接数据库
SQLite 操作
sqlite3
-
连接对象:sqlite3.connect(‘数据文件.db’)
- commit()
- close()
-
游标:cursor = conn.cursor()
- execute('SQL语句‘,[参数])
- fetchall():获取所有结果到列表
- fetchone()
- fetchmany(记录数)
-
参数化查询:避免SQL注入
- ?:参数传递tuple
- :参数名,参数传递字典表