当前位置: 首页 > news >正文

Python通过继承实现多线程

本套课在线学习视频(网盘地址,保存到网盘即可免费观看):

​​https://pan.quark.cn/s/677661ea63b3​​

本节将介绍如何利用Python中的thread模块和threading模块实现多线程,并通过继承threading.Thread类并重写run方法的方式创建自定义线程类。我们将以创建唱歌和跳舞两个线程类为例,详细讲解如何实现多线程程序。

00:00 - 通过继承实现多线程

创建自定义线程类

我们将创建两个自定义线程类:SingThread和DanceThread。这两个类分别实现了线程启动、延迟和结束时的自定义行为,并通过传递参数来控制延迟时间。

import threading
import time# 创建唱歌线程类
class SingThread(threading.Thread):def __init__(self, delay):super().__init__()self.delay = delaydef run(self):for _ in range(5):print("Singing...")time.sleep(self.delay)# 创建跳舞线程类
class DanceThread(threading.Thread):def __init__(self, delay):super().__init__()self.delay = delaydef run(self):for _ in range(5):print("Dancing...")time.sleep(self.delay)# 创建并启动线程
sing_thread = SingThread(1)
dance_thread = DanceThread(1.5)sing_thread.start()
dance_thread.start()sing_thread.join()
dance_thread.join()print("All threads have finished")

03:53 - Python编程:实现多线程

创建多个线程实例

在主程序中,通过for循环创建了多个线程实例,并启动这些线程。为了确保主线程能够等待所有子线程完成后再继续执行,将所有线程放入一个任务列表中,并使用for循环调用每个线程的join方法。

import threading
import time# 创建唱歌线程类
class SingThread(threading.Thread):def __init__(self, name, delay):super().__init__()self.name = nameself.delay = delaydef run(self):print(f"Thread {self.name} started")for _ in range(3):print(f"{self.name} is singing...")time.sleep(self.delay)print(f"Thread {self.name} completed")# 创建跳舞线程类
class DanceThread(threading.Thread):def __init__(self, name, delay):super().__init__()self.name = nameself.delay = delaydef run(self):print(f"Thread {self.name} started")for _ in range(3):print(f"{self.name} is dancing...")time.sleep(self.delay)print(f"Thread {self.name} completed")# 创建并启动多个线程
threads = []
for i in range(3):sing_thread = SingThread(f"SingThread-{i}", 1 + i * 0.5)dance_thread = DanceThread(f"DanceThread-{i}", 1 + i * 0.3)threads.append(sing_thread)threads.append(dance_thread)sing_thread.start()dance_thread.start()# 等待所有线程完成
for thread in threads:thread.join()print("All threads have finished")

计算程序的总运行时间

通过计算程序的开始时间和结束时间的差值,可以得到整个程序的运行时间。

import threading
import time# 创建唱歌线程类
class SingThread(threading.Thread):def __init__(self, name, delay):super().__init__()self.name = nameself.delay = delaydef run(self):print(f"Thread {self.name} started")for _ in range(3):print(f"{self.name} is singing...")time.sleep(self.delay)print(f"Thread {self.name} completed")# 创建跳舞线程类
class DanceThread(threading.Thread):def __init__(self, name, delay):super().__init__()self.name = nameself.delay = delaydef run(self):print(f"Thread {self.name} started")for _ in range(3):print(f"{self.name} is dancing...")time.sleep(self.delay)print(f"Thread {self.name} completed")# 记录开始时间
start_time = time.time()# 创建并启动多个线程
threads = []
for i in range(3):sing_thread = SingThread(f"SingThread-{i}", 1 + i * 0.5)dance_thread = DanceThread(f"DanceThread-{i}", 1 + i * 0.3)threads.append(sing_thread)threads.append(dance_thread)sing_thread.start()dance_thread.start()# 等待所有线程完成
for thread in threads:thread.join()# 记录结束时间并计算总运行时间
end_time = time.time()
total_time = end_time - start_time
print(f"All threads have finished. Total time: {total_time:.2f} seconds")

通过这些示例代码,您可以更好地理解如何在Python中使用threading模块创建和管理多线程程序,并通过继承threading.Thread类来实现自定义线程类。同时,您还可以学习如何计算程序的总运行时间,以评估多线程程序的性能。

相关文章:

Python通过继承实现多线程

本套课在线学习视频(网盘地址,保存到网盘即可免费观看): ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程,并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位,每个工位需要测试产品的电参数; 2、每个另外加四个位置温度; 3、显示4个通道电流曲线,16个通道温度曲线; 4、可切换工艺参数; 5、常规判定,测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中,使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似,但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子: 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 🍃前言🎍解决方案🚩关于注册中⼼🚩CAP理论🚩常见的注册中心 🎄Eureka🚩搭建 Eureka Server🎈创建Eureka-server ⼦模块🎈引入依赖🎈项目构建插件&am…...

JDK安装详细教程(以JDK17为例)

一、JDK的下载 1. 前往oracle官网下载JDK Java Archive Downloads - Java SE 17 在这里选择对应的JDK版本,我这里就直接选择JDK17的版本了。 然后下载对应的软件包,我这里采用的是Windows的安装程序。 点击上述圈起来的链接即可下载安装包,…...

安装nodejs | npm报错

nodejs安装步骤: 官网:https://nodejs.org/en/ 在官网下载nodejs: 双击下载下来的msi安装包,一直点next,我选的安装目录是默认的: 测试是否安装成功: 输入cmd打开命令提示符,输入node -v可以看到版本,说…...

聊点基础---Java和.NET开发技术异同全方位分析

1. C#语言基础 1.1 C#语法概览 欢迎来到C#的世界!对于刚从Java转过来的开发者来说,你会发现C#和Java有很多相似之处,但C#也有其独特的魅力和强大之处。让我们一起来探索C#的基本语法,并比较一下与Java的异同。 程序结构 C#程序…...

【C++】C++中SDKDDKVer.h和WinSDKVer.h函数库详解

目录 一.SDKDDKVer.h介绍 二.WinSDKVer.h介绍 三.WinSDKVer.h 和 SDKDDKVer.h 的区别 一.SDKDDKVer.h介绍 SDKDDKVer.h 是一个在 Windows 软件开发中常见的头文件,它用于定义软件开发工具包(SDK)和驱动开发工具包(DDK&…...

uni-app 蓝牙传输

https://www.cnblogs.com/ckfuture/p/16450418.html https://www.cnblogs.com/yangxiaobai123/p/16021058.html 字符串转base64:https://www.cnblogs.com/sunny3158/p/17312158.html 将 ArrayBuffer 对象转成 Base64 字符串:基础 - uni.arrayBufferT…...

MBR10200CT-ASEMI智能AI应用MBR10200CT

编辑:ll MBR10200CT-ASEMI智能AI应用MBR10200CT 型号:MBR10200CT 品牌:ASEMI 封装:TO-220 批号:最新 恢复时间:35ns 最大平均正向电流(IF):10A 最大循环峰值反向…...

力扣 爬楼梯

动态规划算法基础篇。 class Solution {public int climbStairs(int n) {int[] f new int[n 1];f[0] 1;f[1] 1;//当爬到n阶楼梯时&#xff0c;可知是由n-1阶或n-2阶楼梯而来for(int i 2; i < n; i) {f[i] f[i - 1] f[i - 2];//后面的每一阶种数由前两个状态得到}ret…...

java设计模式之:策略模式+工厂模式整合案例实战(一)

本文介绍项目中常用的策略模式工厂模式的案例&#xff0c;该案例是针对策略类比较少的情况&#xff1b;下一篇会讲解策略类比较多的案例&#xff0c;下面直接开始&#xff1a; 案例1&#xff1a;项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉) 首先要有通知的策略…...

国内Ubuntu安装 stable-diffusion教程,换成国内镜像

安装依赖&#xff1a; 首先更新系统并安装Python 3.10和pip&#xff1a; sudo apt update sudo apt install python3.10 python3-pip 设置Python虚拟环境&#xff08;可选&#xff09;&#xff1a; 安装Python虚拟环境管理工具&#xff0c;并创建激活虚拟环境&#xff1a; su…...

JAVA final详细介绍

一、介绍 final 中文意思: 最后的,最终的. final 可以修饰类、属性、方法和局部变量, 在某些情况下,程序员可能有以下需求&#xff0c;就会使用到final&#xff1a; 1&#xff09;当不希望类被继承时,可以用final修饰。 //如果我们要求A类不能被其他类继承 //可以使用fin…...

45、tomcat+课后实验

tomcat 1、tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat 是用Java代码写的程序&#xff0c;运行的是Java的web应用程序。 tomcat的特点和功能&#xff1a…...

设计模式的七大原则

1.单一职责原则 单一职责原则(Single responsibility principle)&#xff0c;即一个类应该只负责一项职责。如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1、…...

ThreeJS-3D教学十五:ShaderMaterial(noise、random)

ThreeJS-3D教学十四:ShaderMaterial(length、fract、step) 上面这篇主要是操作 fragmentShader 片元着色器,实现对物体颜色的修改,这次咱们来看下修改 vertexShader 顶点着色器,这个其实就是位移各个顶点的位置。 接下来我们先介绍下 noise 噪声函数(Perlin Noise、Sim…...

LeetCode 2974.最小数字游戏:排序+交换奇偶位

【LetMeFly】2974.最小数字游戏&#xff1a;排序交换奇偶位 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-number-game/ 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff…...

使用vllIm部署大语言模型

使用vllm部署大语言模型一般需要以下步骤&#xff1a; 一、准备工作 1. 系统要求 - 操作系统&#xff1a;常见的 Linux 发行版&#xff08;如 Ubuntu、CentOS&#xff09;或 Windows&#xff08;通过 WSL&#xff09;。 - GPU 支持&#xff1a;NVIDIA GPU 并安装了适当的驱动程…...

静态搜索iOS动态链接函数的调用位置

静态搜索iOS动态链接函数的调用位置 可执行文件格式mach-O,是在苹果的操作系统 macOS 和 iOS 上使用的一种二进制文件格式。 在一些iOS安全扫描中&#xff0c;可能存在需要获取函数具体调用位置的需求&#xff0c;能指导用户更精确的定位漏洞。 现在以NSLog函数为例&#xff…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...