测试开发进阶(九)
队列
Queue模块中提供了同步的,线程安全的队列类,包括:
- FIFO Queue 先入先出
- LIFO Queue 后入先出
- Priority Queue:优先级队列
这些都实现了 锁原语,能够在多线程中直接使用
1 | from queue import Queue, LifoQueue, PriorityQueue |
- Queue:先入先出
- LifoQueue:后入先出
- PriorityQueue:优先级队列
1 | from queue import Queue |
查看put_nowait代码,其实就是put方法的block设置为False
1 | q1.put(22, block=False) # block设为False,就和put_nowait效果一致 |
1 | from queue import Queue |
应用
1 | from threading import Thread |
几种get和put
- Queue
1 | # Put a new item in the queue |
- PriorityQueue
1 | def _put(self, item): |
- LifoQueue
1 | def _put(self, item): |
优先级队列
1 | from queue import PriorityQueue # 优先级队列 |
进程
进程:操作系统分配资源的基本单元
进程的状态:
- 就绪:准备完全,等待cpu
- 阻塞:等待某些条件满足,例如一个程序sleep了,此时就处于等待状态
- 运行:cpu正在执行其功能
进程,线程对比
功能
- 进程,能够完成多任务,比如 在一台电脑上能同时运行多个软件
- 线程,能够完成多任务,比如一个QQ中的多个聊天窗口
定义
- 进程是系统进行资源分配和调度的一个独立单位
- 线程是进程的一个实体,是CPU调度和分配的基本单位,它是比进程更小的能独立的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他线程共享所拥有的全部资源
区别
- 一个程序至少有一个进程,一个进程至少有一个线程
- 线程的划分尺度小于进程(资源比进程少),使得多线程程序并发性高
- 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
- 线程不能够独立执行,必须依存在进程中
- 可以将进程理解为工厂中的一条流水线,而线程就是流水线上的工人
优缺点
- 线程执行开销小,但不利于资源的管理和保护;进程正相反
1 | import time |
1 | import time |