6. [了解]多任务的介绍
-
概念:同一时间执行多个任务
-
多任务执行方式:
-
并发:多个任务交替执行
-
并行:多个任务同时执行
-
7. [重点]进程
-
概念:操作系统资源分配的基本单位
-
8. [重点]多进程的使用
-
进程使用的步骤:
-
导入模块
import multiprocessing
-
创建子进程对象
进程对象 = multiprocessing.Process(target=函数名)
-
启动子进程
进程对象.start()
-
9. [重点]获取进程编号
-
获取进程的对象
multiprocessing.current_process()
-
获取进程的编号
import os
os.getpid() -
获取进程的父进程编号
os.getppid()
-
杀死进程
os.kill(进程编号,信号编号)
10. [重点]进程执行带有参数的任务
-
进程的参数传递
-
元组传递参数: args=(参数1,参数2, ....)
-
字典传递参数: kwargs={"参数名": 值, “参数名”: 值}
# 2.创建进程对象
# 2.1 启动带参数的任务,需要创建进程对象时给对象传递参数
# 1)使用元组传递参数 args=(参数1,参数2,....) 按照顺序传递给任务函数
# sub_process = multiprocessing.Process(target=foo, args=(5,))
# 2) 使用字典传递参数 kwargs={"key":value} 按照任务的参数名字传递参数,key是任务的参数名字
sing_process = multiprocessing.Process(target=sing, args=(3, "laowang"))
dance_process = multiprocessing.Process(target=dance, kwargs={"name": "xiaoming", "count": 4})
-
11. [重点]进程的注意点
-
全局变量问题:
多个进程之间不能共享全局变量
-
等待子进程:
主进程会等待子进程结束后再结束
-
主进程结束时,所有子进程销毁
-
守护进程:
子进程对象.daemon = True
-
子进程结束:
子进程对象.terminate()
-
12. [重点]线程
-
概念: cpu调度的基本单位(进程中干活的人)
-
一个py文件是一个程序
-
一个运行起来的程序就是进程
-
一个进程中至少会有一个线程
-
真正执行代码的单元就是线程(cpu调度的基本单位)
-
-
作用:
-
实现多任务的方法之一
-
13. [重点]多线程的使用
-
导入模块
import threading
-
创建线程对象
线程对象 = threading.Thread(target=任务名)
-
启动线程
线程对象.start()
14. [重点]线程执行带有参数的任务
-
返回线程对象:
threading.current_thread()
-
线程执行带参数的任务:
-
元组方式:args=(3, )
# 2.创建线程对象
# 2.1 启动带参数的任务
# 1)元组传递参数 args=(5,) 按照顺序传递
# 2) 字典方式传递参数 kwargs={"count":5} 按照key名作为参数名传递
sing_thread = threading.Thread(target=sing, args=(3,)) -
字典方式:kwargs={"count": 4}
dance_thread = threading.Thread(target=dance, kwargs={"count": 4})
-
15. [重点]线程的注意点
-
线程的执行顺序:无序
-
主线程会等待所有子线程结束:再结束
-
守护线程:
需求: 主线程结束时,所有子线程也结束
-
1.threading.Thread(target=task, daemon=True)
2.子线程对象.setDaemon(True)
3.子线程对象.daemon = True
-
16. [重点]线程的注意点
-
多线程之间共享全局变量:共享全局
-
共享全局变量的问题:多线程出现资源竞争
-
解决办法:
-
join
-
互斥锁
-
-
17. [重点]互斥锁
-
概念:保护公共资源,保证同一时间只有一个线程访问。
-
使用:
-
创建锁:mutex = threading.Lock()
-
上锁:mutex.acquire()
-
解锁:mutex.release()
-
18. [重点]死锁
-
概念:一直等待对方释放锁的场景叫死锁
-
避免死锁:在合适的地方释放锁
19. [重点]进程和线程对比
-
关系对比:线程依附进程,一个进程至少一个线程,也可以有多个线程
-
区别对比:
-
全局变量:
-
进程不能共享全局变量
-
线程可以共享全局变量,但是会出现资源竞争问题,可以使用join和互斥锁解决
-
-
开销上:
-
进程开销大于线程
-
-
概念
-
进程是操作系统资源分配的基本单位。
-
线程是cpu调度的单位
-
-
关系
-
线程依附进程,没有进程就没有线程,不能单独存在
-
-
稳定性
-
多进程编程比单进程多线程编程稳定性更高
-
-
-
优缺点对比:
-
进程:可以使用多核,但是开销大
-
线程:开销小,但是不能使用多核
-