Python多线程与多线程中join()的用法

本文介绍了Python多线程中的join()方法,详细解析了join()在不同情况下的作用,包括线程同步、设置守护线程以及join()的timeout参数。通过实例展示了join()如何影响主线程和子线程的执行顺序,以及在不同设置下程序的运行结果。
摘要由CSDN通过智能技术生成
  • 知识点三:

此时join的作用就凸显出来了,join所完成的工作就是线程同步,即主线程任务结束之后,进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在终止,例子见下面三。

  • 知识点四:

join有一个timeout参数:

当设置守护线程时,含义是主线程对于子线程等待timeout的时间将会杀死该子线程,最后退出程序。所以说,如果有10个子线程,全部的等待时间就是每个timeout的累加和。简单的来说,就是给每个子线程一个timeout的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。

没有设置守护线程时,主线程将会等待timeout的累加和这样的一段时间,时间一到,主线程结束,但是并没有杀死子线程,子线程依然可以继续执行,直到子线程全部结束,程序退出。

一:Python多线程的默认情况

import threading

import time

def run():

time.sleep(2)

print('当前线程的名字是: ', threading.current_thread().name)

time.sleep(2)

if name == ‘main’:

start_time = time.time()

print(‘这是主线程:’, threading.current_thread().name)

thread_list = []

for i in range(5):

t = threading.Thread(target=run)

thread_list.append(t)

for t in thread_list:

t.start()

print(‘主线程结束!’ , threading.current_thread().name)

print(‘一共用时:’, time.time()-start_time)

其执行结果如下

在这里插入图片描述

关键点:

  • 我们的计时是对主线程计时,主线程结束,计时随之结束,打印出主线程的用时。

  • 主线程的任务完成之后,主线程随之结束,子线程继续执行自己的任务,直到全部的子线程的任务全部结束,程序结束。

二:设置守护线程

‘’’

遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025

寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!

‘’’

import threading

import time

def run():

time.sleep(2)

print('当前线程的名字是: ', threading.current_thread().name)

time.sleep(2)

if name == ‘main’:

start_time = time.time()

print(‘这是主线程:’, threading.current_thread().name)

thread_list = []

for i in range(5):

t = threading.Thread(target=run)

thread_list.append(t)

for t in thread_list:

t.setDaemon(True)

t.start()

print(‘主线程结束了!’ , threading.current_thread().name)

print(‘一共用时:’, time.time()-start_time)

其执行结果如下,注意请确保setDaemon()在start()之前。

在这里插入图片描述

关键点:

  • 非常明显的看到,主线程结束以后,子线程还没有来得及执行,整个程序就退出了。

三:join的作用

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

png)

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值