Python的threading模块

为引入多线程的概念,下面是一个例子:
import time, datetimestartTime = datetime.datetime(2024, 1, 1, 0, 0, 0)
while datetime.datetime.now() < startTime:time.sleep(1)print('Program now starting on NewYear2024')
在等待time.sleep()的循环调用完成时,程序不能做任何事情,它只是在那里做着,直到2029年万圣节。 这是因为Python程序在默认情况下,只有一个执行线程。
执行线程
在下载文件时,在设置了一次只能下载一个文件的程序中,同一时间段的下载任务中只能执行下载一个文件,这就是单线程。示例图如下:

在设置同时可下载2个及以上文件的程序中,同一时间段的下载任务可以同时执行下载多个文件,这就是多线程。示例图如下:

threading模块
在上面的代码中,为了不必等待直到time.sleep()函数完成,在Python中可以使用threading模块,在单独的线程中执行延迟或安排的代码。程序可以在原来的线程中同时做其他工作。
以下是一个简单的示例代码:
import threading, timeprint('Starting of program.')def takeANap():time.sleep(10)print('Wake up!')threadObj = threading.Thread(target=takeANap)
threadObj.start()print('End of program.')
代码运行结果是:

过了10秒,运行结果是:
因为 def takeANap() 定义一个希望用于新线程中的函数,此时代码中有两个线程,第一个是print('Starting of program.'),这个线程中还有print('End of program.'),先执行并结束。
而 takeANap()函数的所在的线程是在threadObj.start()调用时才创建,始于takeANap()函数的开始处,在takeANap()返回后才结束。
在程序的所有线程结束之前,Python程序不会终止。第二个线程在第一个线程结束后仍然执行time.sleep(10)调用。
向线程的目标函数传递参数
如果想在新线程中运行的目标函数有参数,可以将目标函数的参数传入threading.Thread()。例如,假设在一个线程中运行以下print()调用:
print('Cats', 'Dogs', 'Frogs', sep=' & ')
![]()
该print()调用有3个常规参数:‘Cats'、'Dogs'和'Frogs',以及一个关键字参数sep=' & '。
常规参数可作为一个列表传递给threading.Thread()中的args关键字参数。关键字参数可以作为一个字典,传递给threading.Thread()中的kwargs关键字参数,代码如下:
import threading
threadObj = threading.Thread(target=print, args=['Cats', 'Dogs', 'Frogs'],
kwargs={'sep': ' & '})
threadObj.start()
![]()
注意:调用threading.Thread()时,关键字参数是target=print,而不是target=print(),是调用print函数本身,而不是调用print(),并传入它的返回值,否则print()的返回将是无。
相关文章:
Python的threading模块
为引入多线程的概念,下面是一个例子: import time, datetimestartTime datetime.datetime(2024, 1, 1, 0, 0, 0) while datetime.datetime.now() < startTime:time.sleep(1)print(Program now starting on NewYear2024) 在等待time.sleep()的循环调…...
HTML5 的离线储存怎么使用,工作原理
TML5提供了一种称为离线储存(Offline Storage)的功能,它允许网页在离线时缓存和存储数据,以便用户可以在没有网络连接的情况下访问这些数据。离线储存是通过使用Web Storage API或者应用程序缓存(Application Cache&am…...
FTP文件传输协议与DHCP
基本概念 主机之间传输文件是IP网络的一个重要功能 互联网早期,最通用方式就是使用FTP(File Transfer Protocol,文件传输协议)以及(Trivial File Transfer Protocol,简单文件传输协议) FTP采用…...
【UE5 多人联机教程】06-显示玩家名称
效果 可以看到玩家输入各自的名称,会显示到自己控制的角色头上。但是目前有一个BUG就是,当客户端加入游戏时会多创建一个服务端的角色。 步骤 1. 打开“BP_ThirdPersonCharacter”,添加一个控件组件,用于显示玩家名称 作为网格体…...
Rust vs Go:常用语法对比(五)
题图来自 Rust vs Go 2023[1] 81. Round floating point number to integer Declare integer y and initialize it with the rounded value of floating point number x . Ties (when the fractional part of x is exactly .5) must be rounded up (to positive infinity). 按规…...
Flutter 扩展函数项目实用之封装SizedBox
Flutter里扩展函数可以用简化代码写法,关键字为extension,伪代码写法如下: extension 扩展类名 on 扩展类型 { //扩展方法 } 在Flutter页面里实现控件间距会常用到SizedBox,可使用扩展函数封装来达到简化代码的目的࿰…...
EMC学习笔记(二十)EMC常用元件简单介绍(二)
EMC常用元件简单介绍(二) 1.瞬态抑制二极管(TVS)2.气体放电管3.半导体放电管 电磁兼容性元件是解决电磁干扰发射和电磁敏感度问题的关键,正确选择和使用这些元件是做好电磁兼容性设计的前提。由于每一种电子元件都有它各自的特性,…...
基本排序算法
目录 一,插入排序 二,希尔排序 三,选择排序 四,冒泡排序 五,快排 5.1 Hoare法 5.2 挖坑法 5.3 指针法 5.4 非递归写法 六,归并排序 6.1 递归 6.2 非递归 一,插入排序 基本思想&…...
python调用百度ai将图片/pdf识别为表格excel
python调用百度ai将图片识别为表格excel 表格文字识别(异步接口)图片转excel 表格文字识别V2图片/pdf转excel通用 表格文字识别(异步接口) 图片转excel 百度ai官方文档:https://ai.baidu.com/ai-doc/OCR/Ik3h7y238 使用的是表格文字识别(异步接口),同步…...
Ansible最佳实践之Playbook管理滚动更新
写在前面 理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡…...
基于Citespace、vosviewer、R语言的文献计量学可视化分析及SCI论文高效写作方法教程
详情点击链接:基于Citespace、vosviewer、R语言的文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法 前言 文献计量学是指用数学和统计学的方法,定量地分析一切知识载体的交叉科学。它是集数学、统计学、文献学为一体,注重量…...
【MATLAB】GM(1,1) 灰色预测模型及算法
一、灰色预测模型概念 灰色预测是一种对含有不确定因素的系统进行预测的方法。 灰色预测通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后…...
Go重写Redis中间件 - Go实现Redis协议解析器
Go实现Redis协议解析器 Redis网络协议详解 在解决完通信后,下一步就是搞清楚 Redis 的协议-RESP协议,其实就是一套类似JSON、Protocol Buffers的序列化协议,也就是我们的客户端和服务端通信的协议 RESP定义了5种格式 简单字符串(Simple String) : 服务器用来返回简单的结…...
海外抖音Tiktok强势来袭,有些人半年赚别人十倍工资
TikTok作为一款流行的短视频社交应用程序,确实在全球范围内取得了很大的成功。许多人通过在TikTok上分享有趣、创意或有吸引力的视频内容,获得了广泛的关注和认可。一些用户甚至能够通过TikTok赚取高额的收入,远远超过传统职业所能获得的工资…...
devDept Eyeshot 2024 预告-Update-Crack
即将发布的版本 开发商在一个动态的环境中运作,事情可能会发生变化。本页提供的信息旨在概述 devDept 软件产品的总体方向。它仅供参考,不应作为做出任何决定性的依据。devDept Eyeshot 2024软件产品描述的任何特性或功能的开发、发布和时间安排仍由 dev…...
教雅川学缠论05-线段
线段需要满足下面4个条件: 1.是由3条笔,或者3条以上组成,同笔一样,线段也是有方向的 2.如果线段起始于向上笔,则终止与向上笔(一定不会终止与向下笔) 3.如果线段起始于向下笔,则终止…...
SpringBoot 配置⽂件
1.配置文件作用 整个项⽬中所有重要的数据都是在配置⽂件中配置的,⽐如: 数据库的连接信息(包含⽤户名和密码的设置);项⽬的启动端⼝;第三⽅系统的调⽤秘钥等信息;⽤于发现和定位问题的普通⽇…...
基于Python的电影票房爬取与可视化系统的设计与实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
Packet Tracer – 配置系统日志和 NTP
Packet Tracer – 配置系统日志和 NTP 目标 第 1 部分:配置系统日志服务 第 2 部分:生成日志记录事件 第 3 部分:手动设置交换机时钟 第 4 部分:配置 NTP 服务 第 5 部分:验证带时间戳的日志 拓扑图 场景 在本…...
TypeScript 联合类型,类型推断,类型断言
联合类型 取值可以为多种类型中的一个 function func(str: number | string):void{}类型断言 当变量需要调用某属性的时候,有不确定当前的类型是什么,可以使用类型断言; 类型断言的两种方式: 1,<类型> 变量名…...
别再只会用FFT了!用MATLAB的czt函数实现窄带信号高分辨率频谱分析
别再只会用FFT了!用MATLAB的czt函数实现窄带信号高分辨率频谱分析 在信号处理领域,频谱分析是最基础也是最重要的技术之一。传统上,工程师们习惯使用快速傅里叶变换(FFT)来获取信号的频域信息。然而,当面对…...
浦语灵笔2.5-7B精彩案例分享:手写体题目识别+解题逻辑生成全过程
浦语灵笔2.5-7B精彩案例分享:手写体题目识别解题逻辑生成全过程 1. 引言:当AI“看懂”你的手写作业 想象一下这个场景:你正在辅导孩子做数学作业,他遇到一道难题,不仅把题目抄了下来,还在旁边画了辅助线、…...
OpenHD图传实战:如何为你的树莓派3B天空端配置720P 60帧,实现低延迟流畅回传
OpenHD图传实战:树莓派3B天空端720P 60帧低延迟优化指南 当你已经完成OpenHD图传系统的基础搭建,却发现默认配置下的画面卡顿、延迟明显时,这篇文章将带你深入系统核心,通过精准调参实现从"勉强能用"到"专业级流畅…...
机器标识重置技术实现的Cursor Pro功能解锁解决方案
机器标识重置技术实现的Cursor Pro功能解锁解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial request li…...
ComfyUI效果实测:多插件加持下的高清AI绘画生成对比
ComfyUI效果实测:多插件加持下的高清AI绘画生成对比 1. 引言:为什么选择ComfyUI 在AI绘画领域,ComfyUI以其独特的工作流设计方式脱颖而出。与传统的AI绘画工具不同,ComfyUI采用节点式工作流设计,让用户可以像搭积木一…...
Pixel Epic动态卷轴效果展示:从空白屏幕到完整研报的实时生成录屏
Pixel Epic动态卷轴效果展示:从空白屏幕到完整研报的实时生成录屏 1. 引言:当科研遇上像素冒险 在传统的研究报告撰写过程中,我们常常面对冰冷的界面和机械化的交互体验。Pixel Epic彻底改变了这一现状,将严肃的学术研究变成了一…...
利用kimi与快马平台,十分钟搭建个人博客web应用原型
最近想快速验证一个个人博客的创意,但自己从头写代码太费时间。尝试用InsCode(快马)平台的Kimi模型生成原型,没想到十分钟就搞定了可运行的Web应用,分享下这个高效流程: 明确需求梳理结构 先花2分钟在纸上画了博客的基本框架&…...
5分钟上手Godot 4.0地形系统:用AutoTile实现像素风草地自动拼接(含Layer新功能演示)
5分钟掌握Godot 4.0地形系统:用AutoTile实现像素风无缝拼接 在像素风格游戏开发中,地形拼接一直是让开发者头疼的问题——如何让草地、石块、沙土等元素自然过渡?传统方案往往需要手动放置大量图块或编写复杂逻辑。Godot 4.0的TileMap系统带来…...
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题引入:JetBrains IDE试用期限制的痛点分析 作为开发…...
Apache Flink Agents 0.2.1 发布公告
Apache Flink 社区很高兴地宣布发布 Apache Flink Agents 0.2 系列的首个缺陷修复版本。 此版本包含 3 项缺陷和漏洞修复以及一些对Flink-Agents 0.2的小幅改进。下面列出了所有缺陷修复和改进内容(不包括构建基础设施和构建稳定性方面的改进)。如需查看…...
