Python - 多线程,多进程中的join和Event及没有使用join和event区别

news2025/1/19 8:09:48

一. 前言

在Python的多线程和多进程编程中,join()Event 都是用来控制线程或进程之间的同步关系的工具,它们的作用类似,但还是有一些区别。

二. 概念

1. join()

join() 方法是线程或进程实例的一个方法,用于阻塞当前调用线程或进程,直到该线程或进程执行完成后才能继续执行后续代码。join()方法常用于等待另一个线程或进程的完成。在父进程中,可以使用 join() 来等待所有子进程完成之后再继续执行父进程的代码。

2. Event

Event 是一个线程或进程同步机制,主要用于线程之间的通信。一个 Event 表示一个内部标志,可以设置或清除。可以使用 set()方法设置 Event 标志,并使用 wait() 方法等待标志被设置。另外,还可以使用 clear() 方法清除标志。

三. 区别

  • join() 属于线程或进程的实例方法,只能在当前线程或进程中使用, Event 则可以跨线程或进程共享。
  • join() 的作用是等待线程或进程执行完成,以便继续执行后续代码;Event 的作用是线程之间的同步和通信,实现局部的等待。

总的来说,join() 适用于控制线程或进程之间的执行顺序,而 Event 则适用于实现线程之间的同步和通信,只是局部的等待。

四. 示例代码

下面以线程为例,进程的实现也是类似。

1. 使用join()

等待某一个线程全部执行完才执行下一步

# -*- coding:utf-8 -*-
import time
import threading


def run(n, event):
    for i in range(1000):
        print(i, end=' ')
    # event.set()
    while n > 0:
        print('Threading:', n)
        n -= 1
        time.sleep(1)


event = threading.Event()

if __name__ == '__main__':
    print('start threading.')
    t = threading.Thread(target=run, args=(5, event))
    t.start()
    t.join()
    # event.wait()
    print('end threading...')

运行结果: 可以看出程序依次执行完所有的代码。
在这里插入图片描述

2. 使用Event

等待线程中一部分代码执行才执行后面的代码

# -*- coding:utf-8 -*-
import time
import threading


def run(n, event):
    for i in range(1000):
        print(i, end=' ')
    event.set()
    while n > 0:
        print('Threading:', n)
        n -= 1
        time.sleep(1)


event = threading.Event()

if __name__ == '__main__':
    print('start threading.')
    t = threading.Thread(target=run, args=(5, event))
    t.start()
    # t.join()
    event.wait()
    print('end threading.')

运行效果:可以看出,end threading只是等待了for 循环这个代码之前代码运行完就运行了。说明Event只是部分的等待。
在这里插入图片描述

3. 不使用event和join

代码

# -*- coding:utf-8 -*-
import time
import threading


def run(n, event):
    for i in range(1000):
        print(i, end=' ')
    # event.set()
    while n > 0:
        print('Threading:', n)
        n -= 1
        time.sleep(1)


event = threading.Event()

if __name__ == '__main__':
    print('start threading.')
    t = threading.Thread(target=run, args=(5, event))
    t.start()

    print('end threading.')

运行效果:可以看出end threading先于for 循环运行了,并没有等待for循环代码执行完。
在这里插入图片描述

五. 总结

  • 在主线程或主进程执行时,需要等待子线程或子进程完成某个任务,才能继续执行后续操作。如果没有使用join()方法,主线程或主进程可能会在子线程或子进程未完成任务时就已经退出,导致程序异常或结果不正确。
  • join()和Event都是多线程和多进程编程中非常重要的同步工具,它们可以使程序更加可靠和高效。当程序需要等待其他线程或进程完成后才能继续执行时,可以使用join()方法;当程序需要协调和通信多个线程或进程时,可以使用Event。

当然,与此同时,要注意使用join()方法时,需要考虑线程或进程之间的同步和互斥问题,避免死锁和竞争条件。

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

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

相关文章

6. 自定义异常 全局异常处理 测试异常处理

目录 1. 自定义异常 2. 全局异常处理 3. 测试异常处理 1. 自定义异常 创建⼀个异常类,加入状态码与状态描述属性。 凡是业务代码中出现的可预期的异常,统一抛出 ApplicationException public class ApplicationException extends RuntimeException{//…

[Java优选系列第1弹]如何优化Java三层架构开发效率?三个实用技巧分享

💞优选系列制作漫长,每篇一经写出不再创作,均是呕心沥血制作,且看且珍惜💫 一直在等你,你终于来啦💖 绿色代表解释说明 黄色代表重点 红色代表精髓 Java三层架构…

qt 安 装

之后版本都是在线安装 下载地址 Index of /archive/online_installers 只用这三个即可,其他不用管默认

操作系统-笔记-第一章-操作系统的概念

目录 一、第一章——操作系统的概念 1、操作系统的概念、功能 (1)层次 (2)总结 2、操作系统的特征(4个) (1)并发与并行 (2)共享与互斥 (3…

【网络基础实战之路】基于MPLS-VPN技术实现两个私网间互通的实战详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

主流的嵌入式微处理器

目前主流的嵌入式微处理器系列有: ARM系列 MIPS系列 PowerPC系列 Super H系列 一、MPC/PPC系列 PowerPC(简称PPC),其基本设计源自IBM的POWER.1991年,APPLE(苹果电脑)、IBM、Motorola(摩托罗拉)组成的AIM联盟发展出Power微处理器…

Windows Server 2019设置使用照片查看器查看图片的设置方法

1、使用winR快捷键快速打开运行,输入regedit打开注册表: 2、在注册表中找到:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations 3、在右侧新建字符串项: 4、例如新建两项.jpg 和.png值…

eNSP:mpls综合实验

实验要求&#xff1a; 拓扑图 路由、IP配置 r1: <Huawei>sys [Huawei]sys r1 [r1]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.2.1 30[r1]ip route-static 192.168.3.0 30 192.168.2.2 [r1]ip rou…

生信豆芽菜-TIP预测免疫

网址&#xff1a;http://www.sxdyc.com/immuneTipScore 一、TIP预测免疫的介绍 TIP&#xff08;Tumor Immune Prediction&#xff09;是一种用于预测肿瘤免疫状态的计算方法。它通过分析基因表达数据来推断肿瘤样本中的免疫细胞浸润情况和免疫反应程度。 TIP的基本原理如下&…

HTML中的字符串转义

为什么要转义&#xff1f; 转义可以防止 xss 攻击。接下来&#xff0c;我们来看一下如何转义。 HTML Sanitizer API Sanitizer 是浏览器自带的转义方法&#xff0c;在2021年初被提出&#xff0c;兼容性问题很大。 列举几个常用的 API&#xff1a; const $div document.qu…

RTC实验

一、RTC简介 RTC(Real Time Clock)即实时时钟&#xff0c;它是一个可以为系统提供精确的时间基准的元器件&#xff0c;RTC一般采用精度较高的晶振作为时钟源&#xff0c;有些RTC为了在主电源掉电时还可以工作&#xff0c;需要外加电池供电BCD码&#xff0c;四位二进制表示一位…

Cesium--一些实验过程中的效果记录

1.一种反射效果&#xff1a; 片元着色器代码 fragmentShaderSource:in vec3 v_positionMC;in vec3 v_positionEC;in vec2 v_st;void main(){czm_materialInput materialInput;vec3 normalEC normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), ve…

从零开始,外贸邮件营销如何做?

邮件营销是外贸企业开发新用户和维系老客户非常有效的方法之一&#xff0c;因其操作方便快捷、成本低廉且精准投放的特性&#xff0c;已成为外贸行业的必备营销手段。但如何才能利用好邮件营销&#xff0c;让邮件营销的作用发挥到最大呢&#xff1f;今天U-Mail李工就跟大家分享…

Neo4j的使用场景_以及Windows版Neo4j Community Server安装_欺诈检测_推荐_知识图谱---Neo4j图数据库工作笔记0003

可以看到使用场景,比如欺诈检测, 要建立图谱,才能进行,欺诈人员检测 可以看到图谱的各种应用场景 然后推荐引擎也需要,可以看到 在金融,旅行,求职招聘,保健,服务,媒体娱乐,都可以进行推荐 然后还有知识图谱 身份访问管理,这里,可以进行安全管理,可以挖掘出潜在关系,分析, 某…

【Nacos2.24持久化到Postgres数据库适配——详细版】

Nacos2.24持久化到Postgres数据库适配 前言步骤拉取源码添加依赖修改源码编译打包修改配置测试运行 参考 前言 公司基于springboot实现了一套单体框架&#xff0c;目前我负责搭建SpringCloud微服务框架&#xff0c;需要用到nacos&#xff0c;但是由于公司特殊性&#xff0c;na…

IntelliJ IDEA 2023.1 windows找不到文件‘chrome’

异常效果图 1、【打开设置】 2、 搜索【web brow】 3、 在桌面上找到常用的浏览器 例如我的edge-【右击】-【打开文件位置】-【找到目标】-【双击】-【ctrla全选】-【ctrlc复制】 4、修改正确的路径如下&#xff1a; 5、再次尝试打开【main.jsp】 浏览器正常显示&#xff01;…

十、接口(1)

本章概要 抽象类和方法接口创建 默认方法多继承接口中的静态方法Instrument 作为接口 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。 这种机制在编程语言中不常见&#xff0c;例如 C 只对这种概念有间接的支持。而在 Java 中存在这些关键字&#xff0c;说明…

SAP MM学习笔记23-购买发注的账户分配类型(勘定Category)

SAP中控制财务凭证过账科目的是 账号分配类型&#xff08;勘定Category&#xff09;栏目。 ・账号分配类型&#xff08;勘定Category&#xff09;有&#xff1a; 1&#xff0c;K 原价Center&#xff08;成本中心。用于消耗物料采购 的过账&#xff09; 2&#xff0c;E 得意先…

任我行CRM系统存在 SQL注入漏洞[2023-HW]

任我行CRM系统存在 SQL注入漏洞 一、 产品简介二、 漏洞概述三、 复现环境四、 漏洞复现小龙POC又是一通哈拉少 五、 修复建议 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及…