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

Chapter 39 Python多线程编程

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!

文章目录

  • 前言
  • 一、并行执行
  • 二、threading模块


前言

现代操作系统如 macOS、UNIX、Linux 和 Windows 等,均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 Python 中利用 threading 模块实现多线程编程。


本篇文章参考:黑马程序员

一、并行执行

①进程
进程是计算机程序的一次执行实例,是操作系统对正在运行的程序所分配的资源的集合。每个进程都有自己的内存空间、系统资源和执行状态。在操作系统中,进程是资源调度和管理的基本单位。一个进程可以包含多个线程。

②线程
线程是进程中的一个执行单元,是操作系统进行 CPU 调度的最小单位。一个进程可以由多个线程组成,它们共享进程的资源,如内存和文件描述符。在同一进程中的线程之间可以直接通信。

通俗来讲,进程就好比一家公司,是操作系统对程序进行运行管理的单位;线程就好比公司的员工,是进程实际的工作者,并且一个进程(公司)可以有多个线程(员工)。

③并行执行
并行执行是指在同一时间内进行不同的工作
多个进程可以在操作系统中同时运行,即使在单核处理器上,进程之间也会通过时间片轮转等机制实现并行效果。
而在一个进程内部,多线程的执行更是可以帮助我们实现真正的并行操作,比如一个Python程序可以做到一个线程在输出“你好”,另一个线程在输出“Hello”,像这样一个程序在同一时间做两件乃至多件不同的事情, 我们就称之为多线程并行执行。

操作系统中可以运行多个进程,即多任务运行。
一个进程内可以运行多个线程,即多线程运行。

【注意】

  • 进程之间是内存隔离的, 即不同的进程拥有各自的内存空间。 这就类似于不同的公司拥有不同的办公场所。
  • 线程之间是内存共享的,线程是属于进程的,一个进程内的多个线程之间是共享这个进程所拥有的内存空间的。 这就类似于公司员工之间是共享公司的办公场所。

在这里插入图片描述

二、threading模块

大多数现代编程语言都支持多线程编程,Python 也不例外。Python 提供了 threading 模块来实现多线程操作,其基本的使用方法如下:
①导入threading模块

import threading  

②定义线程要执行的函数

def thread_function():  # 线程执行的任务  pass

③创建线程对象
thread_obj = threading.Thread([group [, target [, name [, args [, kwargs]]]]]

  • group:暂时无用,未来功能的预留参数
  • target:执行的目标任务名
  • name:线程名,一般不用设置
  • args:以元组的方式给执行任务传参
  • kwargs:以字典方式给执行任务传参

④启动线程
thread_obj.start()

【示例】

import time
def sing():while True:print("在唱歌")# 等待 1 秒time.sleep(1)def dance():while True:print("在唱歌")# 等待 1 秒time.sleep(1)if __name__ == '__main__':sing()dance()

运行后会一直输出“在唱歌”

输出结果:
在唱歌
在唱歌
在唱歌
……

【分析】
在这段代码中,sing() 在主线程中运行,由于while True:永远为真,sing() 会无限循环,程序会一直在这个循环中执行。因此,dance() 函数永远不会被调用,运行后会一直输出“在唱歌”。

import time
import threadingdef sing():while True:print("在唱歌")time.sleep(1)def dance():while True:print("在跳舞")time.sleep(1)if __name__ == '__main__':# 创建一个新的线程,其目标函数为 singsing_thread=threading.Thread(target=sing)# 创建另一个线程,其目标函数为 dancedance_thread=threading.Thread(target=dance)# 启动线程sing_thread.start()dance_thread.start()

输出结果:
在唱歌
在跳舞
在唱歌
在跳舞
……

【分析】
在这段代码中,sing 和 dance 函数分别代表两个独立的线程。它们在同一时间内向控制台输出信息,实现了并行执行。

若需给线程传递参数,可以使用 args 和 kwargs形参:

  • args:以元组的方式给执行任务传参
  • kwargs:以字典方式给执行任务传参

【示例】

import time
import threadingdef sing(msg):while True:print(msg)time.sleep(1)def dance(msg):while True:print(msg)time.sleep(1)if __name__ == '__main__':# 创建一个唱歌的线程# 传入元组(元组是用逗号区分的,当只有一个元素时,需要在其后面加逗号)sing_thread=threading.Thread(target=sing,args=("在唱歌",))# 创建一个跳舞的线程dance_thread=threading.Thread(target=dance,kwargs={"msg":"在跳舞"})# 启动线程sing_thread.start()dance_thread.start()

输出结果:
在唱歌
在跳舞
在唱歌
在跳舞
……

在这个例子中,sing 函数和 dance 函数各自接受消息参数,实现了更灵活的输出功能。

相关文章:

Chapter 39 Python多线程编程

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、并行执行二、threading模块 前言 现代操作系统如 macOS、UNIX、Linux 和 Windows 等,均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 …...

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口 1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下…...

一文入门mysql 数据库

一、对数据库的操作 1.展示所有的数据库 show databases; 2.创建数据库 create database 数据库名 charset utf8; 3.删除数据库 drop database 数据库名; 4.查看当前使用的数据库 select database(); 5.使用数据库 use 数据库名; 二、对数据表的操作 1.展示所有表…...

通义千问( 四 ) Function Call 函数调用

4.2.function call 函数调用 大模型在面对实时性问题、私域知识型问题或数学计算等问题时可能效果不佳。 您可以使用function call功能,通过调用外部工具来提升模型的输出效果。您可以在调用大模型时,通过tools参数传入工具的名称、描述、入参等信息。…...

设置idea中放缩字体大小

由于idea没默认支持ctrl滚轴对字体调节大小,下面一起设置一下吧! 点击 文件 -> 设置 按键映射 -> 编辑器操作 -> 搜索栏输入f 点击减小字体大小 -> 选择增加鼠标快捷键 按着ctrl键,鼠标向下滚动后,点击确定即可 然后…...

frameworks 之getEvent指令

frameworks 之getEvent指令 指令解析源码追溯源码解析1.解析参数2.初始化ufds数组3.添加到poll 并做对应处理 通过 getEvent 可以识别按键基本命令和里面的关键信息 涉及到的类如下 system/core/toolbox/toolbox.csystem/core/toolbox/tools.hsystem/core/toolbox/getevent.c …...

tensorboard显示一片空白解决方案

OK艾瑞巴蒂 不知道看这个视频几个小土堆过来的,今天已经发了一篇博文探讨快速下载tensorboard了 下面用的时候叒出现问题了 from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs")# writer.add_image() # Yx for i in range…...

C#编程中,如何实现一个高效的数据排序算法?

在C#编程中&#xff0c;可以使用内置的排序方法来实现高效的数据排序。最常用的方法是使用Array.Sort()和List<T>.Sort()。这些方法内部使用了快速排序算法&#xff08;Quick Sort&#xff09;&#xff0c;它是一种非常高效的排序算法&#xff0c;平均时间复杂度为O(n lo…...

LookupError: Resource averaged_perceptron_tagger not found.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Leetcode JAVA刷刷站(39)组合总和

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用回溯算法来找到所有可能的组合&#xff0c;使得组合中的数字之和等于目标数 target。因为数组中的元素可以无限制地重复选择&#xff0c;所以在回溯过程中&#xff0c;我们不需要跳过已经选择的元素&#x…...

Spring中AbstractAutowireCapableBeanFactory

AbstractAutowireCapableBeanFactory 是 Spring 框架中的一个抽象类&#xff0c;位于 org.springframework.beans.factory.support 包中。它实现了 AutowireCapableBeanFactory 接口&#xff0c;提供了一些通用的方法和逻辑&#xff0c;以支持 Spring 中的自动装配功能。 主要…...

PostgreSQL的walwriter和archiver进程区别

PostgreSQL的walwriter和archiver进程区别 在PostgreSQL中&#xff0c;walwriter和archiver进程是两个重要的后台进程&#xff0c;它们负责管理WAL&#xff08;Write-Ahead Logging&#xff0c;预写日志&#xff09;文件&#xff0c;但它们的职责和功能有所区别。理解这两个进…...

前端字体没有授权,字体版权检测(是否为方正字体)

1.截图系统中的首页和登录页面&#xff0c;主要是有字体的地方 2.在线字体版权检测地址&#xff1a;字体版权自动检测-求字体网 3.上传照片&#xff0c;开始对图片进行检测&#xff0c;每个账号有三次免费次数 4.检测完&#xff0c;直接查看检测报告即可&#xff0c; 报告中…...

在 SOCKS 和 HTTP 代理之间如何选择?

在 SOCKS 和 HTTP 代理之间进行选择需要彻底了解每种代理的工作原理以及它们传达的配置。只有这样&#xff0c;您才能轻松地在不同类型的代理之间进行选择。 本文概述了 HTTP 和 SOCKS 代理是什么、它们如何运作以及它们各自带来的好处。此外&#xff0c;我们将比较这两种代理类…...

C++适配windows和linux下网络编程TCP简单案例

C网络编程 网络协议是计算机网络中通信双方必须遵循的一套规则和约定&#xff0c;用于实现数据的传输、处理和控制。这些规则包括了数据格式、数据交换顺序、数据处理方式、错误检测和纠正等。网络协议是使不同类型的计算机和网络设备能够相互通信的基础&#xff0c;是网络通信…...

OpenDDS的GUID是如何构造的?

1、GUID、RepoID、GUID_t概念和关系 GUID(Global Unique IDentifiers)是RTPS规范约定的DDS对象的唯一性ID;RepoId(Repository IDentifiers)是Repo服务约定的DDS对象的唯一性ID;GUID和RepoId,都是基于GUID_t结构体定义,名称不同,但实质上是一样的。题外话: 无论是GUID还…...

初识MySQL(安装与配置环境)

嗨&#xff01;今天我们进入一个新的领域---数据库。 首先来个小小铺垫。 我们平时存储东西的时候&#xff0c;一般用到文件。为什么有文件了&#xff0c;还继续要这个数据库呢&#xff1f; 很明显&#xff0c;文件有一些不好的地方&#xff0c;需要数据库来进行补充。 文件…...

druid+logback打印sql执行日志

druid 的LogFilter 为我们准备了四种logger类型&#xff0c;对应打印 datasource相关、connection相关、statement相关、resultset相关的日志。 druid.sql.Datasource&#xff1a;打印数据源相关的字段。 druid.sql.Connection&#xff1a;打印应用程序获得数据库连接的过程。…...

C++编程:无锁环形队列 (LockFreeRingQueue)的简单实现、测试和分析

文章目录 0. 概述1. 无锁环形队列概述1.1 无锁环形队列的特点1.2 无锁环形队列的优势与局限 2. LockFreeRingQueue 实现2.1 Enqueue 操作流程图2.2 Dequeue 操作流程图 3. 核心实现细节3.1 环形队列的大小调整3.2 索引计算3.3 原子操作与CAS3.4 线程让步 4. 测试示例程序4.1 实…...

植物生长时为什么会扭动?科学家解开令查尔斯·达尔文困惑的千古之谜

在一项新的研究中&#xff0c;来自美国和以色列的物理学家可能已经弄清了植物生长过程中的一种古怪行为–也是查尔斯-达尔文本人在其生命的最后几十年里所好奇的一个谜&#xff1a;对于许多人类来说&#xff0c;植物可能看起来静止不动&#xff0c;甚至有点无趣。但实际上&…...

30天试用期重置神器:JetBrains IDE免费使用终极解决方案

30天试用期重置神器&#xff1a;JetBrains IDE免费使用终极解决方案 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 还在为JetBrains IDE试用期到期而烦恼吗&#xff1f;每次30天试用结束后&#xff0c;那些强大的…...

从账单明细看Taotoken按Token计费模式的实际支出情况

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 从账单明细看Taotoken按Token计费模式的实际支出情况 在模型应用开发与测试阶段&#xff0c;成本控制是团队普遍关心的问题。固定套…...

别再手动绕田了!用Python+Google Earth Pro搞定农田边界KML文件(附完整代码)

零成本农田边界数字化&#xff1a;Python与Google Earth Pro实战指南 在农业自动化领域&#xff0c;获取精确的农田边界数据是路径规划的第一步。传统方法依赖RTK设备或无人机测绘&#xff0c;成本高昂且操作复杂。本文将介绍一种无需专业硬件的解决方案&#xff0c;仅需一台普…...

告别手动写测试报告:用AI自动生成可视化测试总结

测试报告的价值困境与破局在软件交付的最后关头&#xff0c;测试报告往往陷入一种尴尬的境地。一方面是倒计时的上线压力&#xff0c;另一方面是堆积如山的测试数据。许多测试工程师都有过这样的经历&#xff1a;打开Excel&#xff0c;机械地复制用例执行数、通过率、缺陷数&am…...

STM32 HAL库实战:用CD74HC4067扩展16路模拟输入,附多路复用防干扰代码

STM32 HAL库实战&#xff1a;用CD74HC4067扩展16路模拟输入&#xff0c;附多路复用防干扰代码 在嵌入式开发中&#xff0c;资源有限的微控制器常常面临模拟输入通道不足的问题。以STM32F103C8T6为例&#xff0c;虽然性能强大&#xff0c;但ADC通道数量有限&#xff0c;难以满足…...

NHSE完整指南:动物森友会存档编辑器的终极使用手册

NHSE完整指南&#xff1a;动物森友会存档编辑器的终极使用手册 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦&#xff01;动物森友会》中收集稀有物品而烦恼吗&#xff1f;想快速…...

赣州 GEO 科普|AI 时代品牌信息基建,七文 GEO 助力品牌长效可见

赣州GEO科普&#xff5c;AI时代品牌信息基建&#xff0c;读懂生成式引擎优化逻辑人工智能全面普及的当下&#xff0c;生成式AI正在重塑大众的信息获取方式。如今多数用户习惯借助文心一言等AI工具检索品牌、查询行业服务&#xff0c;人工智能会整合全网信息进行智能作答。在此行…...

别再只盯着CVE-2017-7529复现了,聊聊Nginx缓存机制下的那些‘信息泄露’风险

深入解析Nginx缓存机制与敏感信息防护实践 Nginx作为现代Web架构的核心组件&#xff0c;其高效的缓存机制在提升性能的同时也隐藏着不容忽视的安全隐患。当开发者们热衷于讨论CVE-2017-7529这类高危漏洞的复现时&#xff0c;我们更需要将目光投向日常配置中那些容易被忽视的信息…...

东方博宜OJ入门题解:从A+B到高精度算法的实战解析

1. 东方博宜OJ平台入门指南 第一次接触在线评测系统(OJ)时&#xff0c;很多人都会被各种题目搞得晕头转向。东方博宜OJ作为国内知名的编程练习平台&#xff0c;特别适合编程新手从零开始系统学习。我刚开始刷题时也走过不少弯路&#xff0c;今天就和大家分享一些实战经验。 这…...

暗黑破坏神2角色编辑器终极指南:如何轻松打造完美角色

暗黑破坏神2角色编辑器终极指南&#xff1a;如何轻松打造完美角色 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神2中无尽的刷装备、练级而烦恼吗&#xff1f;Diablo Edit2是一款…...