【Python】超详细实例讲解python多线程(threading模块)

06-01 727阅读

什么是多线程?

线程(thread)是操作系统中能够进行运算的最小单位,包含于进程之中,一个进程可以有多个线程,这意味着一个进程中可以并发多个线程,即为多线程。

对于一个python程序,如果需要同时大量处理多个任务,有使用多进程和多线程两种方法。在python中,实现多线程主要通过threading模块,而多进程主要通过multiprocessing模块。

这两个模块的主要区别是:threading模块基于线程,而multiprocessing模块基于进程。threading模块使用共享内存来实现多线程,所有线程都共享一样的变量(这点在后续的实例中可以感受到);而multiprocessing基于子进程,每个子进程之间都有独立的变量和数据结构。两者的区别意味着threading更使用于I/O密集型任务(例如需要进行多表格读取操作),multiprocessing模块更适用于包含较多计算的CPU密集型任务(矩阵运算,图片处理类任务)。

需要注意的是,由于python中的GIL锁的存在,Python解释器只允许一个Python进程使用,这意味着对于一个解释器只允许一个进程在运行,这也是为什么threading模块无法适用于CPU密集型这类需要大量CPU资源的任务,因为一个进程的CPU资源有限,无论开启多少个线程,总的资源就只有那些,总耗时不会有太大变化。而multiprocessing模块则可以开多个进程,能够更快速的处理CPU密集型任务。

关于GIL锁和Multiprocessing模块的部分就不继续深入介绍了,本次主要介绍如何使用threading模块实现多线程的相关内容。

线程完整生命周期

一个线程完整的生命周期包括新建——就绪——运行——阻塞——死亡。

  1. 新建:即新创建一个线程对象
  2. 就绪:调用start方法后,线程对象等待运行,什么时候开始运行取决于调度
  3. 运行:线程处于运行状态
  4. 阻塞:处于运行状态的线程被堵塞,通俗理解就是被卡住了,可能的原因包括但不限于程序自身调用sleep方法阻塞线程运行,或调用了一个阻塞式I/O方法,被阻塞的进程会等待何时解除阻塞重新运行
  5. 死亡:线程执行完毕或异常退出,线程对象被销毁并释放内存

主线程与子线程 

我们讲的多线程实际上指的就是只在主线程中运行多个子线程,而主线程就是我们的python编译器执行的线程,所有子线程和主线程都同属于一个进程。在未添加子线程的情况下,默认就只有一个主线程在运行,他会将我们写的代码从开头到结尾执行一遍,后文中我们也会提到一些主线程与子线程的关系。

不扯那么多概念了,接下来直接进入正题!

实例1:直接使用Thread创建线程对象

Thread类创建新线程的基本语法如下:

Newthread = Thread(target=function, args=(argument1,argument2,...))

  • Newthread: 创建的线程对象
  • function: 要执行的函数
  • argument1,argument2: 传递给线程函数的参数,为tuple类型

假设一个任务task(当然task可以替换为其他任何任务,本实例中仅为假设),这个任务实现的功能是每隔1s打印某个字母,我们使用两个子线程,分别同时打印不同的字母a和b,实例如下:

"""

Date: 2024/5/15
Author: 猫猫不吃sakana
"""
from threading import Thread
import time
from time import sleep
# 自定义的函数,可以替换成其他任何函数
def task(threadName, number, letter):
    print(f"【线程开始】{threadName}")
    m = 0
    while m 
【Python】超详细实例讲解python多线程(threading模块)
(图片来源网络,侵删)
【Python】超详细实例讲解python多线程(threading模块)
(图片来源网络,侵删)
【Python】超详细实例讲解python多线程(threading模块)
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码