2.1多线程的概念
-
线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度,也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。
-
线程是Python程序中实现多任务的另外一种方式,线程的执行需要cpu调度来完成。
2.2多线程的使用
-
导入线程模块
-
import threading
-
-
创建子线程并指定执行的任务
-
sub_thread = threading.Thread(target=任务名)
-
-
启动线程执行任务
-
sub_thread.start()
-
1. 导入线程模块
#导入线程模块
import threadingCopy
2. 线程类Thread参数说明
Thread([group [, target [, name [, args [, kwargs]]]]])
group: 线程组,目前只能使用None
target: 执行的目标任务名
args: 以元组的方式给执行任务传参
kwargs: 以字典方式给执行任务传参
name: 线程名,一般不用设置
3. 启动线程
启动线程使用start方法
-
2.3线程执行带有参数的任务
-
线程执行任务并传参有两种方式:
-
元组方式传参(args) :元组方式传参一定要和参数的顺序保持一致。
-
字典方式传参(kwargs):字典方式传参字典中的key一定要和参数名保持一致。
-
2.4线程的注意点介绍
-
线程之间执行是无序的
-
线程之间执行是无序的,它是由cpu调度决定的 ,cpu调度哪个线程,哪个线程就先执行,没有调度的线程不能执行。
-
进程之间执行也是无序的,它是由操作系统调度决定的,操作系统调度哪个进程,哪个进程就先执行,没有调度的进程不能执行。
-
-
主线程会等待所有的子线程执行结束再结束
-
设置守护主线程有两种方式:
-
threading.Thread(target=show_info, daemon=True)
-
线程对象.setDaemon(True)
-
-
-
线程之间共享全局变量
-
线程之间共享全局变量数据出现错误问题
-
线程同步: 保证同一时刻只能有一个线程去操作全局变量
-
线程等待(join)
-
-
进程和线程的对比
-
关系对比
-
区别对比
-
优缺点对比
-
1. 关系对比
-
线程是依附在进程里面的,没有进程就没有线程。
-
一个进程默认提供一条线程,进程可以创建多个线程。
-
2. 区别对比
-
进程之间不共享全局变量
-
线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 线程同步
-
创建进程的资源开销要比创建线程的资源开销要大
-
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
-
线程不能够独立执行,必须依存在进程中
-
多进程开发比单进程多线程开发稳定性要强
-
3. 优缺点对比
-
进程优缺点:
-
优点:可以用多核
-
缺点:资源开销大
-
-
线程优缺点:
-
优点:资源开销小
-
缺点:不能使用多核
-