python多线程----------主线程,子线程,任务讲解----拿下就是胜利

news2024/11/26 7:25:36

这一篇博客主要介绍给分不清楚主线程.子线程的小可爱们

在之前的一篇博客中我简单的介绍了并发,并行

并发:是在时段的完成多个任务 ,但是每个时间点只有一个任务运行

而多线程就是这一个原理

非守护线程

代码:

from threading import Thread
import requests
from selenium import webdriver
import time
# 并发 cpu数量小于执行任务数量 比如一个cpu运行多个进程
# 并行 cpu数量大于任务数量, 比如4个cpu运行4个进程


def sing():
    # 子线程
    for i in range(5):
        print("我是打打怪")


def dance():
    # 任务
    # for i in range(5):
    #     print("我是小小怪")
    #     time.sleep(1)
    print("11")
    print("22")
    time.sleep(1)
    print("33")


"""主线程"""
if __name__ == '__main__':
    a = time.time()
    # 创建5个子线程,每个子线程都发送一次dance()任务,非守护线程不会等待主线程运行结束而结束,而守护停止是在主线程和非守护运行完成后停止
    for i in range(5):
        t1 = Thread(target=dance)
        # 线程创建按完成
        t1.start()
    b = time.time()
    print(b - a)

结果:

可以看出主线程执行完成,但是子线程还在运行,这就是非守护线程(子线程),

非守护线程:就是主线程运行结束,还在运行,知道自己调用的函数运行完成(任务运行完成)

对于非守护线程,就算主线程执行完了,也要等非守护进程完成才能退出

守护线程

代码:

from threading import Thread
import requests
from selenium import webdriver
import time
# 并发 cpu数量小于执行任务数量 比如一个cpu运行多个进程
# 并行 cpu数量大于任务数量, 比如4个cpu运行4个进程


def sing():
    # 子线程
    for i in range(5):
        print("我是打打怪")
        time.sleep(5)
        print("子线程(守护)运行")


def dance():
    # 任务
    # for i in range(5):
    #     print("我是小小怪")
    #     time.sleep(1)
    print("11")
    time.sleep(1)
    print("子线程(非守护)运行")



"""主线程"""
if __name__ == '__main__':
    a = time.time()
    # 创建5个子线程,每个子线程都发送一次dance()任务,非守护线程不会等待主线程运行结束而结束,而守护停止是在主线程和非守护运行完成后停止

    for i in range(5):
        t1 = Thread(target=dance)
        # 线程创建按完成
        t1.start()

    for i in range(5):
        t2 = Thread(target=sing)
        t2.setDaemon(True)
        t2.start()
    b = time.time()
    print(b - a)

结果:

守护线程:要么自己运行在主线程或非守护线程前结束,要么等主线程或非守护线程结束,然后自己被强制行结束

子线程其实就是并发(同一时间段内执行多个操作)的任务;但本人理解为主线程里面有子线程,通过子线程来执行任务,任务就是我们定义的函数

setDaemon(Ture) :设置子进程为守护进程 ==  主进程关闭,子进程随即关闭【当你觉得一些线程不重要的时候,可以设置守护线程。】

 Join() :设置阻塞 == 该子进程执行完才能执行主线程【当一些任务要先于另一些任务完成的时候,可以用】

这里就不介绍了

总结:这里是给分不清楚主线程和子线程的小可爱的,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/665862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

规则引擎调研及初步使用 | 京东云技术团队

一、产生的背景 生产过程中,线上的业务规则内嵌在系统的各处代码中,每次策略的调整都需要更新线上系统,进行从需求->设计->编码->测试->上线这种长周期的流程,满足不了业务规则的快速变化以及低成本的更新试错迭代。…

亚马逊关于儿童餐椅/增高椅/折叠椅和非折叠椅/凳政策

检测认证很迷茫?关注老李直通关!大家好我是李老师。近期碰到很多卖家在吐槽儿童椅子类型的检测,甚至某些卖家要做2-3个标准,确实有点夸张,下面是我为大家整理的关于各类儿童椅子认证的标准,希望可以帮到大家…

游泳戴的耳机推荐,列举感受水下快乐的游泳耳机

​游泳是个真心好玩的活动,对一般人来说简直是大杀器!它不仅对身体没有太大伤害,还能锻炼到身体的大部分肌肉,对心肺也超级有帮助。不过,问题来了: 之前很少见到有人戴耳机游泳,主要是担心进水…

论文笔记:Toolformer:可以教会自己使用工具的语言模型

Toolformer:可以教会自己使用工具的语言模型 摘要Introduction现有大模型的局限处理办法本文的idea Approach样例化API调用执行API调用筛选API调用模型微调 实验局限 论文地址点这里 摘要 语言模型(LMs)呈现了令人深刻的仅使用少量的范例或…

Spring Boot 容器的生命周期

Spring Boot 容器的生命周期 在使用 Spring Boot 进行开发时,我们经常需要对 Spring 容器的生命周期进行了解和掌握。本文将介绍 Spring Boot 容器的生命周期,包括容器的创建、初始化、销毁等过程,并提供相应的代码示例。 Spring Boot 容器的…

C++基础(3)——类和对象(1)

前言 本文主要介绍了C中类和对象的基本知识 4.1.1:封装 写一个Circle类,然后分别在栈上和堆上创建两个圆对象,对象包含属性和行为,调用求周长的成员函数,并打印出结果。 4.1.2:封装-访问权限 public成员…

Server - 配置安装 Git LFS | BWM-NG | Tmux | BOS 等命令

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131302104 构建实验Docker: nvidia-docker run -it --name git-lfs-[your name] --nethost -p [port]:[port] -v [nfs path…

基于spring cloud技术栈构建的一款源码级jvs低代码平台,值得收藏

开发团队在日常的项目开发过程中 ,会遇到各种各样单点需求。 确保应用程序能够满足特定的业务需求并与现有系统和服务进行有效集成,那么是团队选择对应技术栈或者整体开发工具的核心考量: 核心关注的点: 1、技术栈的选择&#…

vue3-实战-11-管理后台-权限管理之角色管理模块

目录 1-角色列表 1.1-原型需求分析 1.2-接口封装和数据类型定义 1.3-请求服务器端获取列表页面数据 1.4-组件页面动态渲染数据 2-角色新增和编辑 2.1-需求原型分析 2.2-页面结构以及功能实现 3-角色的删除 4-分配权限 4.1-原型需求分析 4.2-获取服务器数据渲染数据…

五、Producer源码解读

Producer源码解读 在 Kafka 中, 我们把产生消息的一方称为 Producer 即 生产者, 它是 Kafka 的核心组件之一, 也是消息的来源所在。它的主要功能是将客户端的请求打包封装发送到 kafka 集群的某个 Topic 的某个分区上。那么这些生产者产生的消息是怎么传到 Kafka 服务端的呢&a…

二维码带参数跳转小程序页面,小程序获取参数。

功能介绍 普通链接二维码,是指开发者使用工具对网页链接进行编码后生成的二维码。 线下商户可不需更换线下二维码,在小程序后台完成配置后,即可在用户扫描普通链接二维码时打开小程序,使用小程序的功能。 对于普通链接二维码&a…

5.4.2 网络地址转换NAT

5.4.2 网络地址转换NAT 我们知道为了缓解IPv4地址紧缺的问题,相继出现了一系列缓解地址耗尽的解决方案,比如通过子网划分(5.2.8 子网编址)实现网络地址在多个物理网络之间的复用,通过无分类编址(5.2.9 无分…

纳斯达克大屏宣传品牌的价值何在?媒介易解析背后的优势!

在当今竞争激烈的商业环境中,企业需要不断寻找创新的方式来宣传和推广品牌。而纳斯达克大屏作为全球最具规模和影响力的数字广告媒体之一,其庞大的电子屏幕成为企业宣传品牌和增加曝光度的理想平台。为什么企业选择在纳斯达克大屏宣传品牌?一…

SpringBoot中接收POST参数的几种方式

今天在做一个vue前后端分离项目的过程中,踩了一个坑,记录一下 前端如下: 用户名字段:username 密码字段:password 提交后,发现后端怎么也收不到参数,总结如下: 常见的接收post参…

【云计算 | Azure】微软 Azure 基础解析(九)Azure 标识、身份管理、Azure AD 的功能与用途

本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中。 本系列文章列表如下: 【Azure】微软 Azure 基础解析(三)云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx 【A…

12. WebGPU 矩阵数学

在最近的 3 篇文章中,介绍了如何平移、旋转和缩放顶点位置。平移、旋转和缩放都被认为是一种变换。这些变换中的每一个都需要对着色器进行修改,并且 3 个转换中的每一个都依赖于顺序。 在之前的示例中,先缩放,然后旋转&#xff0…

第十章 STM32+ESP8266接入机智云 实现小型IOT智能家居项目

前言 最近有不少小伙伴私信留言,想要我推出一章能够通过APP进行远程控制并获取传感器信息的实验教程。说实话在嵌入式毕设里边,这算是中等偏上水平的了。刚好我也有兴趣写写。全篇4700多字,我写的很详细,按着文章一步一步操作即可…

arm64架构的linux中断分析(二)

文章目录 3. GICv3中断控制器3.1 GICv3中断控制器设备树3.2 GICv3中断控制器驱动 3. GICv3中断控制器 gic在soc中的位置如下: GICv3(Generic Interrupt Controller Version 3)是一种基于ARM Cortex-A架构的中断控制器,它提供了…

联邦元学习综述

联邦元学习综述 张传尧1,2, 司世景1, 王健宗1,肖京1 1 平安科技(深圳)有限公司,广东 深圳 518063 2 中国科学技术大学,安徽 合肥 230026 摘要:随着移动设备的普及,海量的数据在不断产生。数据隐…

express的使用(六) 中间件的理解

原文链接 express的使用(六) 中间件的理解") 不要脸的求关注,希望能让大家批评我的不足点,方便学习,一键三连最好不过了~另外,乌鸦玩心之钢是真的爽! 看前提示 本篇主要讲的是关于express中间件的一些基础概念…