python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式
threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口
以后我们就用 threading 模块来管理线程就可以了。
Tread 类:控制线程创建、启动及运行方式
一、线程的创建和启动(两种方法)
from threading import Thread
1、实例化 Thread 类的方式:
- 定义一个任务(函数或方法)
- 实例化 Thread 类,并传入函数名和参数
- start() 方法启动线程,运行传入的函数
- 任务运行完后,线程自动退出
备注说明:
start() 方法,实质是自动运行 Thread 类中 run() 方法,run() 方法去执行传入的函数
通过看源码 Thead 类的构造函数是这样的,下面做以下参数说明def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None):group:参数保留,为了以后能加入线程组的功能,目前python没有实现线程组target:是可调用对象,比如一个函数名neme:线程的名称,默认情况下,threading-Nargs:可调用对象的参数元组,默认()kwargs:可调用对象的关键字参数字典,默认{}daemon:是否为守护线程(True或者False),可以实例化时赋值
实例化 Thread 类
![](/assets/blank.gif)
函数带参数的实例化
![](/assets/blank.gif)
2、继承 Thread 类,重写 run() 方法的方式
- 定义一个子类,继承Thread类
- 重写run()方法(写任务)
- 实例化子类
- start() 方法启动线程,自动运行子类中的 run() 方法
- 任务运行完后,线程自动退出
备注说明:
定义的子类,只能重写 __init__() 和 run() 方法
重写 __init__() 方法时,必须初始化 Tread 类的构造函数。super(子类, self).__init__()
重写 run() 方法
![](/assets/blank.gif)
重写__init__() 方法
![](/assets/blank.gif)
二、线程同步和线程守护
线程同步(join()):
- 主线程遇到 thd.join() 等待子线程
- 等子线程(thd)执行结束,主线程再继续执行,直到结束
线程守护(thd.daemon = True):
- 主线程不等待子线程
- thd 跟随主线程结束
- daemon 必须在调用 start() 之前或实例化 Thread 类时设置
运行方式有四种:
1、线程同步(join):等子线程结束,主线程再继续运行
![](/assets/blank.gif)
2、线程同步(join):等子线程2秒,主线程再继续运行,开始各运行各的
![](/assets/blank.gif)
3、线程守护(daemon):不等子线程,跟随主线程结束
![](/assets/blank.gif)
4、守护同步(daemon、join):等子线程2秒,跟随主线程结束
![](/assets/blank.gif)
三、线程的其他方法
1、is_alive():返回线程是否存活(True或者False)
2、name:线程名称
设置有三种方法 是等价的
- thd = Tread(target=drink, name='drink-thread')
- thd.name='drink-thread' 常用
- thd.setName('drink-thread')
读取有两种方法 是等价的
- thd.name 常用
- thd.getName()
3、daemon:线程守护
设置 有三种方法 是等价的
- thd = Tread(target=drink, daemon=True)
- thd.daemon = True 常用
- thd.setDaemon(True)
读取 有两种方法 是等价的
- thd.daemon 常用
- thd.isDaemon()
4、ident:返回线程 id
- thd.ident
小伙伴喜欢关注哦,接下来讨论 线程锁
python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式相关推荐
- python 中主线程结束 子线程还在运行么_「干货」python线程笔记
引言&动机 考虑一下这个场景,我们有10000条数据需要处理,处理每条数据需要花费1秒,但读取数据只需要0.1秒,每条数据互不干扰.该如何执行才能花费时间最短呢? 在多线程(MT)编程出现之前 ...
- python 中主线程结束 子线程还在运行么_Python爬虫进阶(二)爬虫之多任务模块(Ⅰ)...
今天,咱们来讨论多任务模块了. 一.多任务介绍 二.多线程的创建 一.多任务介绍 多任务,有很多场景中的事情是同时进行的,比如开车的时候,手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的.这些就是多 ...
- linux主线程结束 子线程还能运行么,linux主线程和子线程
"读了三遍,愣是没读懂楼主想说啥.######@java_zf 我现在在做的一个项目用到了多线程,我就在项目中子线程调用的一个函数中加了个sleep.你可以写个简单的代码试一下,应该比较简单 ...
- 主线程结束子线程会跟着结束吗
Java 多线程默认不是守护线程,当使用setDaemon它设置为守护线程时,如果此时Java虚拟机中没有别的正在执行的非守护线程,那么它会随着main的结束而结束,下面我们测试一下: 将main主方 ...
- VC++ 中主线程等待子线程结束的方法
void WaitForThreadExit(void) {DWORD dwRet; //返回值MSG msg; int wait_count=4; //线程句柄有4个int nExitThreadC ...
- python主线程_Python主线程和子线程
Python主线程和子线程 一.setDaemon(False) 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行的最小单位,当设置多线程时,主线程会创建多个子线程,在Python中,默认 ...
- python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法
Python多线程中主线程等待所有子线程结束的方法 发布时间:2020-07-30 14:39:04 来源:亿速云 阅读:77 作者:小猪 这篇文章主要讲解了Python多线程中主线程等待所有子线程结 ...
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- java main 如何不退出_为什么java main主线程退出了子线程还能运行;golang main结束所有协程都被结束了...
最近看golang main函数结束,所有协程都被结束了 结论是这样:A不是main程的情况下,在A程里开启B程,A程执行完,A程return之后,B程不受影响,不会挂掉.所有子协程与main程同级的 ...
最新文章
- 白嫖谷歌 GPU 资源!使用神经网络提取 PDF 表格工具来了,支持图片
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据...
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
- jquery after append appendTo三个函数的区别
- Apache Spark学习:利用Scala语言开发Spark应用程序
- RenderManager - cssHook - select_all icon render logic
- 细数开源历史上的十个重大事件
- 我最开始学dancing link的HTML5的时候
- 三问Spring事务:解决什么问题?如何解决?存在什么问题?
- 支持中国西安申办ICCV2025,见证计算机视觉蓬勃发展的20年 | Vote for ICCV2025 Xi'an China...
- Windows下打开Url 代码封装 C++
- 【递归】剑指offer——面试题19:二叉树的镜像
- LabVIEW顺序结构
- Win11添加日语输入法的教程
- 尽量使用unity引擎的Random随机数
- 【MindSpore】 No module named apos;mindspore.dataset.transformsapos;
- ACM POJ 题目分类(完整整理版本)
- 大学生考系统集成项目管理工程师有什么用?
- 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
- 阿里云-DataWorks- ODPS SQL开发