-
PEP 8 代码规范
-
python高级编程技巧
- 深入类和对象
- 类与对象深度问题及解决技巧
- python垃圾回收及性能分析
- python元类及迭代器生成器
-
socket编程
- UDP 发送与接收数据
- TCP 发送与接收数据
-
多任务
- 线程
- 线程与进程
- 进程、GIL全局解释器锁
- 协程
类
- 关闭动态绑定属性 __slots__
了解计算机
- 进程调度/时间片轮转/多级反馈队列
- 并发 并行
- 同步 异步
- 阻塞 非阻塞
线程、进程、协程
- threading.Thread
- multiprocessing.Process
线程是操作系统能够进行运算调度的最小单位。它包含在进程之中,是进程中的实际运行单位。
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础,并且进程是线程的容器。程序是包含数据及其组织形式的描述,进程是一个执行中的程序。
进程是一个实体,每一个进程都有他自己的地址空间。一般情况下,包括文本区域,数据区域和堆栈。
- daemon=True 守护线程
- t.start()
- 使用threading.Condition()完成线程同步
- condition
- wait
- notify
- 互斥锁 mutex
- lock
- aquire
- release
- 垃圾回收 import dis
- pycharm中python程序设置:allow parallel run.
GIL 全局解释器锁
GIL并不是python的特征,python完全不依赖于GIL。在cpython解释器中,同一个进程下开启的多线程。同一时刻只能有一个线程执行,无法利用多核优势。GIL本质上就是一把互斥锁。将并发运行变成串行,以此来控制同一时间共享数据只能被一个任务修改,进而保证数据安全。
协程
- yield 实现多任务
- greenlet 实现协程(手动切换)
- gevent 实现协程(遇到延迟切换)
可发自己的静态web服务器
- 编写TCP服务器端程序
- 获取浏览器发送的HTTP请求报文数据
cmd 命令:python -m http.server 端口号 - 读取(固定)页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
- HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
#### 需求1:实现多任务文件夹复制
- 获取用户要复制的文件夹名字;
- 创建一个新的文件夹
- 获取文件夹中所有待拷贝的文件名称
- 创建进程池
- 添加拷贝任务
- 进度条
进程之间的进程通信 multiprocessing.Queue
进程池中的进程通信 multiprocessing.Manager().Queue()