文章目录
- 一、背景介绍
- 二、python的同步原语
-
- 1、互斥量
- 2、条件变量
- 三、实现线程安全的队列Queue
-
- 1、队列
- 2、实现线程安全的队列的功能
- 3、什么会影响线程安全
- 4、编程实现
- 四、实现基本任务对象Task
-
- 1、概念
- 2、编程实现
- 五、线程池简介
-
- 1、什么是线程池
- 2、为什么使用线程池
- 六、实现任务处理线程Process Thread
-
- 1、功能、必备属性
- 2、编程实现
- 七、实现任务处理线程池Pool
-
- 1、线程池基本功能
- 2、实现任务处理线程池
- 3、编程实现
- 八、编写测试用例
- 九、实现异步任务处理AsyncTask
一、背景介绍
实现支持异步任务的线程池
使用python3
- 很多语言都提供了线程池
- Java:ThreadPoolExecutor
- Python3:ThreadPoolExecutor
本篇的主要内容:
二、python的同步原语
1、互斥量
- 申请:lock=threading.Lock()
- 加锁:lock.acquire()
- 解锁:lock.release()
2、条件变量
- 申请条件变量:condition=threading.Condition()
- 加锁:condition.acquire()
- 解锁:condition.release()
- 等待:condition.wait()
- 唤醒:condition.notify()
- python中不需要将条件变量和互斥量自己结合,threading库直接将互斥量放入条件变量中
三、实现线程安全的队列Queue
1、队列
-
队列用于存放多个元素,是存放各种元素的池
- 存放的元素可以是线程,可以是任务,也可以是别的
2、实现线程安全的队列的功能
- 获取当前队元素数量
- 往队列放入元素
- 从队列取出元素
3、什么会影响线程安全
队列可能有多个线程同时操作,因此需要保证线程安全
比如:
-
场景: 多个线程同时访问队列元素
- 目的: 为了保证多个线程获取的串行
- 方法: 使用“锁”保护队列
-
场景: 队列元素为空时获取队列元素,
- 目的: 此时阻塞线程,等待队列到队列不为空,
- 方法: 使用条件变量等待队列元素不为空
4、编程实现
queue.py
四、实现基本任务对象Task
1、概念
指放入队列中的任务对象
- 实现基本任务对象需要
- 任务参数
- 任务唯一标记(uuid)
- 任务具体的执行逻辑
2、编程实现
task.py
五、线程池简介
1、什么是线程池
- 线程池是存放多个线程的容器
- CPU调度线程执行后不会销毁线程
- 将线程放回线程池重复利用
2、为什么使用线程池
- 线程是稀缺资源,不应该频繁创建和销毁
- 架构解耦,线程创建和业务处理解耦,更加优雅
- 线程池是使用线程的最佳实践
六、实现任务处理线程Process Thread
1、功能、必备属性
- 任务处理线程需要不断的从任务队列里取任务执行
- 任务处理线程需要有一个标记,标记线程什么时候应该停止
- 实现任务处理线程
- 基本属性(任务队列、标记)
- 线程执行的逻辑
- 线程停止(stop)
2、编程实现
pool.py
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!