一个简单的例子让你秒懂 python多线程

本文深入浅出地讲解了Python中的多线程概念,包括线程的定义、主线程与子线程的区别,以及如何利用多线程提高程序效率。通过实例对比单线程与多线程的执行过程,展示多线程在处理并发任务时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python中的多线程是一个非常重要的知识点,但python 默认是单任务,所以今天简单的介绍一下多线程。

什么是线程:

  • 线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。
  • 线程是进程中的一个实体,是CPU调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。
  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行

主线程:当⼀个程序启动时,就有⼀个进程被操作系统(OS)创建,与此同时⼀个线程也⽴刻运 ⾏,该线程通常叫做程序的主线程

主线程的重要性:

  • 是产生其他子线程的线程
  • 通常它必须最后完成执行各种关闭动作

子线程:可以看做是程序执⾏的⼀条分⽀,当⼦线程启动后会和主线程⼀起同时执⾏

使用threading .Thread(target=函数名,args=(参数列表,元组))创建子线程对象


那究竟什么是多线程呢,通过下面的例子很容易就搞懂了。

假如你要烧水和拖地还有玩游戏,一共三个任务,如果是单线程来处理这三个任务的话,先烧水,等水烧开,再拖地,然后才能玩游戏。这样等待水烧开的时间就白白浪费了,倘若事交给多线程来做的话,就先烧水,烧水的过程中(相当于IO操作的时候)把时间资源让出来给拖地和玩游戏,当拖完地且玩完游戏后水也烧好了,这个就是多线程的优势。

我们分别来看一下单线程和多线程的实现:

单线程:
import time

def mop_floor():
    print('我要拖地了')
    time.sleep(1)
    print('地拖完了')

def game():
    print('我要玩游戏')
    time.sleep(4)
    print('游戏结束了')

def heat_up_watrt():
    print('我要烧水了')
    time.sleep(6)
    print('水烧开了')

start_time = time.time()
heat_up_watrt()
mop_floor()
game()
end_time = time.time()
print('总共耗时:{}'.format(end_time-start_time))

结果如下:
单线程

多线程:
import threading
import time

def mop_floor():
    print('我要拖地了')
    time.sleep(1)
    print('地拖完了')

def game():
    print('我要玩游戏')
    time.sleep(4)
    print('游戏结束了')

def heat_up_watrt():
    print('我要烧水了')
    time.sleep(6)
    print('水烧开了')

start_time = time.time()
t1 = threading.Thread(target=heat_up_watrt)
t2 = threading.Thread(target=mop_floor)
t3 = threading.Thread(target=game)

t1.start()
t2.start()
t3.start()

t1.join()
t2.join()
t3.join()

end_time = time.time()
print('总共耗时:{}'.format(end_time-start_time))

结果如下:
多线程
可以看到烧水等待的时候直接执行拖地任务,并且总共耗时为6秒,比上面的单线程节省了近一半的时间。

关于这里的start和jion都是固定的操作套路,记住这两个代词以后直接套用即可,需要注意的是多线程程序的执行顺序是不确定的。当执行到sleep语句时,线程将被阻塞(Blocked),到sleep结束后,线程进入就绪(Runnable)状态,等待调度的命令执行另一个子线程,线程调度将自行选择一个线程执行。


如有错误,欢迎私信纠正,谢谢支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值