首先了解多线程之前先科普一下并发以及并行的概念,这两者大家很容易混淆.
一,意思不同
1、并发:并发是指两个或多个事件在同一时间间隔发生。
2、并行:并行是指两个或者多个事件在同一时刻发生。
二,处理方式不同
1、并发:并发在一台处理器上同时处理多个任务。
2、并行:并行在多台处理器上同时处理多个任务。
三,python 不能处理并行只能处理并发场景
在跑python代码时我们可以开很多个线程让他们并发执行,但是这个并发只能在该进程被分配的CPU上运行也就是说只能有一个CPU在跑这个线程。
这是因为python有一个全局解释器锁GIL。每个线程都要先取得这个锁才能被CPU调用运行,那么,什么是 GIL 呢?GIL 是最流程的 CPython 解释器
(平常称为 Python)中的一个技术术语,中文译为全局解释器锁,其本质上类似操作系统的 Mutex。GIL 的功能是:在 CPython 解释器中执行的每
一个 Python 线程,都会先锁住自己,以阻止别的线程执行。
python 多线程:
线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程,程序的运行速度可能加快
多线程的创建方式:
1.from threading import Thread :通过导入threading 模块中的Thread 类创建
2.threading.Thread :可以通过类的继承方式进行创建
Thread创建线程的初始化参数:
1.target:指定线程执行的任务函数
2.name: 给线程起的名字 (默认的线程命名:Thread-1,Thread-2....)
3.daemon: 是否设置为守护线程
守护线程:主线程(主程序)执行结束,不管线程中的任务是否执行完毕 强制关闭线程
4.args:给任务函数传参 (位置参数)
5.kwargs:给任务函数传参(关键字参数)
一,通过第一种方式实现多线程任务执行
实例:不使用多线程执行任务,所有事物处理花费的时间总共11秒左右处理完毕
# 新建两个任务,我们看下两个运行完成所需要花费的时间 def work(name): for i in range(5): print(f"{name}------正在做事情1------") time.sleep(1) def task2(name): for i in range(6): print(f"{name}-----正在做事情2------") time.sleep(1) start_time = time.time() work("张三") work1("李四") end_time = time.time() print("===============运行结束================") print(end_time - start_time) =====================运行结果======================== 张三------正在做事情1------ 张三------正在做事情1------ 张三------正在做事情1------ 张三------正在做事情1------ 张三------正在做事情1------ 李四-----正在做事情2------ 李四-----正在做事情2------ 李四-----正在做事情2------ 李四-----正在做事情2------ 李四-----正在做事情2------ 李四-----正在做事情2------ ===================运行结束====================== 11.03499460220337
例: 使用多线程执行任务,本身单任务的执行方法,两条任务执行完成的时间11秒多,但是多线程的模式可以最多6秒钟执行完毕,
每条线程执行不同的任务.
# ===========通过多线程实现多任务运行的模式================ def work(): for i in range(5): print(f"张三------正在做事情1------") time.sleep(1) def work1(): for i in range(6): print(f"李四-----正在做事情2------") time.sleep(1) Thread(target=work).start() Thread(target=work1).start() ===================输出结果======================== 张三------正在做事情1------ 李四-----正在做事情2------ 张三------正在做事情1------李四-----正在做事情2------ 张三------正在做事情1------李四-----正在做事情2------ 张三------正在做事情1------李四-----正在做事情2------ 李四-----正在做事情2------张三------正在做事情1------ 李四-----正在做事情2------
二,通过第二种继承的方式实现多线程执行,run方法是Thread里面的任务执行方法,可以通过在子类从写父类的run的执行任务.
"=======通过继承父类的方式实现多线程===============" class Test(Thread): def run(self): for i in range(6): print("执行工作1") a = Test() b = Test() a.start() b.start() "=================输出结果==================" 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1 执行工作1
标签:多线程,python,李四,线程,------,-----,执行 From: https://www.cnblogs.com/manxingsir/p/16905899.html