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

Python 线程池

Python 线程池

flyfish

线程池的概念

线程池是一种多线程处理形式,它预先创建了一定数量的线程,这些线程会被保存在一个线程池中。当有新的任务提交时,线程池会从池中取出一个空闲的线程来执行该任务;若池中没有空闲线程,任务会被暂时放入任务队列等待,直到有线程空闲。使用线程池可以避免频繁创建和销毁线程带来的开销,提高程序的性能和资源利用率。

常用函数

1. submit(fn, *args, **kwargs)

  • 功能:将可调用对象 fn 及其参数 *args**kwargs 提交给线程池执行,返回一个 Future 对象。通过这个 Future 对象可以获取任务的执行结果、状态等信息。
  • 示例
from concurrent.futures import ThreadPoolExecutordef add(a, b):return a + bwith ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(add, 2, 3)result = future.result()print(result)

2. map(func, *iterables, timeout=None, chunksize=1)

  • 功能:类似于内置的 map 函数,将可迭代对象 iterables 中的每个元素依次作为参数传递给函数 func 进行处理,返回一个迭代器。可以设置超时时间 timeout 和分块大小 chunksize
  • 示例
from concurrent.futures import ThreadPoolExecutordef square(x):return x * xnumbers = [1, 2, 3, 4]
with ThreadPoolExecutor(max_workers=2) as executor:results = executor.map(square, numbers)for result in results:print(result)

3. shutdown(wait=True, cancel_futures=False)

  • 功能:关闭线程池,阻止新任务的提交。wait 参数为 True 时,会等待所有已提交的任务完成;cancel_futures 参数为 True 时,会尝试取消所有未开始的任务。
  • 示例
from concurrent.futures import ThreadPoolExecutordef task():print("执行任务")executor = ThreadPoolExecutor(max_workers=1)
future = executor.submit(task)
executor.shutdown(wait=True)

4. wait(fs, timeout=None, return_when=ALL_COMPLETED)

  • 功能:等待指定的 Future 对象集合 fs 中的任务完成。timeout 为可选的超时时间,return_when 可以取 ALL_COMPLETED(所有任务完成)、FIRST_COMPLETED(第一个任务完成)、FIRST_EXCEPTION(第一个任务抛出异常)。
  • 示例
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
import timedef task(n):time.sleep(n)return nwith ThreadPoolExecutor(max_workers=2) as executor:futures = [executor.submit(task, 1), executor.submit(task, 2)]done, not_done = wait(futures, return_when=ALL_COMPLETED)for future in done:print(future.result())

5. as_completed(fs, timeout=None)

  • 功能:返回一个迭代器,当 Future 对象集合 fs 中的任务完成时,会按完成顺序产生对应的 Future 对象。可以设置超时时间 timeout
  • 示例
from concurrent.futures import ThreadPoolExecutor, as_completed
import timedef task(n):time.sleep(n)return nwith ThreadPoolExecutor(max_workers=2) as executor:futures = [executor.submit(task, 2), executor.submit(task, 1)]for future in as_completed(futures):print(future.result())

6. Future 对象的方法

  • result(timeout=None):获取任务的执行结果。如果任务还未完成,会阻塞直到任务完成或超时(timeout 为可选的超时时间)。
  • exception(timeout=None):获取任务抛出的异常。如果任务没有抛出异常,返回 None;如果任务还未完成,会阻塞直到任务完成或超时。
  • add_done_callback(fn):为任务添加一个回调函数 fn,当任务完成时会自动调用该回调函数,并将 Future 对象作为参数传递给它。
  • cancel():尝试取消任务。如果任务还未开始,会成功取消;如果任务已经开始或完成,取消失败。返回 True 表示取消成功,False 表示取消失败。
  • cancelled():判断任务是否已被取消。返回 True 表示已取消,False 表示未取消。
  • running():判断任务是否正在执行。返回 True 表示正在执行,False 表示未执行或已完成。
  • done():判断任务是否已完成(包括正常完成、抛出异常或被取消)。返回 True 表示已完成,False 表示未完成。

示例

1. example1_single_task.py

from concurrent.futures import ThreadPoolExecutordef square(x):return x * xwith ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(square, 5)result = future.result()print(result)

此代码的主要功能是向线程池提交单个任务,并获取该任务的执行结果。具体步骤为:

  • 定义一个 square 函数,该函数用于计算输入值的平方。
  • 创建一个仅包含 1 个工作线程的线程池。
  • 利用 submit 方法将 square 函数和参数 5 提交给线程池,获取一个 Future 对象。
  • 调用 Future 对象的 result 方法获取任务的执行结果并打印。

2. example2_multiple_tasks.py

from concurrent.futures import ThreadPoolExecutordef multiply(x, y):return x * ytasks = [(2, 3), (4, 5), (6, 7)]
with ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(multiply, *task) for task in tasks]for future in futures:print(future.result())

该代码的功能是向线程池提交多个任务,并获取每个任务的执行结果。详细步骤如下:

  • 定义一个 multiply 函数,用于计算两个输入值的乘积。
  • 准备一个包含多个任务参数元组的列表 tasks
  • 创建一个包含 3 个工作线程的线程池。
  • 使用列表推导式将每个任务参数元组提交给线程池,得到一个 Future 对象列表。
  • 遍历 Future 对象列表,调用 result 方法获取每个任务的执行结果并打印。

3. example3_map_function.py

from concurrent.futures import ThreadPoolExecutordef add_one(x):return x + 1numbers = [1, 2, 3, 4, 5]
with ThreadPoolExecutor(max_workers=3) as executor:results = executor.map(add_one, numbers)for result in results:print(result)

此代码使用线程池的 map 方法批量处理任务。具体操作如下:

  • 定义一个 add_one 函数,用于将输入值加 1。
  • 准备一个包含多个数值的列表 numbers
  • 创建一个包含 3 个工作线程的线程池。
  • 使用 map 方法将 add_one 函数应用到 numbers 列表的每个元素上,得到一个结果迭代器。
  • 遍历结果迭代器,打印每个任务的执行结果。

4. example4_wait_for_all.py

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
import timedef task(n):time.sleep(n)return ntasks = [1, 2, 3]
with ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, n) for n in tasks]wait(futures, return_when=ALL_COMPLETED)for future in futures:print(future.result())

该代码的功能是等待线程池中的所有任务完成,并获取它们的执行结果。步骤如下:

  • 定义一个 task 函数,该函数会根据输入的秒数进行休眠,模拟耗时操作,最后返回输入值。
  • 准备一个包含多个任务参数的列表 tasks
  • 创建一个包含 3 个工作线程的线程池。
  • 使用列表推导式将每个任务参数提交给线程池,得到一个 Future 对象列表。
  • 调用 wait 函数,传入 Future 对象列表和 ALL_COMPLETED 参数,等待所有任务完成。
  • 遍历 Future 对象列表,调用 result 方法获取每个任务的执行结果并打印。

5. example5_first_completed.py

from concurrent.futures import ThreadPoolExecutor, wait, FIRST_COMPLETED
import timedef task(n):time.sleep(n)return ntasks = [3, 1, 2]
with ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, n) for n in tasks]done, _ = wait(futures, return_when=FIRST_COMPLETED)for future in done:print(future.result())

此代码的主要功能是获取线程池中第一个完成的任务的结果。具体实现步骤为:

  • 定义一个 task 函数,该函数会根据输入的秒数进行休眠,模拟耗时操作,最后返回输入值。
  • 准备一个包含多个任务参数的列表 tasks
  • 创建一个包含 3 个工作线程的线程池。
  • 使用列表推导式将每个任务参数提交给线程池,得到一个 Future 对象列表。
  • 调用 wait 函数,传入 Future 对象列表和 FIRST_COMPLETED 参数,等待第一个任务完成。
  • 遍历已完成的 Future 对象列表,调用 result 方法获取任务的执行结果并打印。

6. example6_callback_function.py

from concurrent.futures import ThreadPoolExecutordef task(x):return x * 2def callback(future):print(f"任务结果: {future.result()}")with ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(task, 3)future.add_done_callback(callback)

该代码为线程池中的任务添加了回调函数。具体步骤如下:

  • 定义一个 task 函数,用于将输入值乘以 2。
  • 定义一个 callback 函数,用于打印任务的执行结果。
  • 创建一个包含 1 个工作线程的线程池。
  • 使用 submit 方法将 task 函数和参数 3 提交给线程池,获取一个 Future 对象。
  • 调用 Future 对象的 add_done_callback 方法,为任务添加回调函数。当任务完成时,会自动调用回调函数。

7. example7_exception_handling.py

from concurrent.futures import ThreadPoolExecutordef task(x):if x == 2:raise ValueError("输入值不能为 2")return x * 2with ThreadPoolExecutor(max_workers=3) as executor:futures = [executor.submit(task, n) for n in [1, 2, 3]]for future in futures:try:print(future.result())except ValueError as e:print(f"捕获到异常: {e}")

此代码的功能是处理线程池任务中抛出的异常。具体操作如下:

  • 定义一个 task 函数,当输入值为 2 时,抛出 ValueError 异常,否则将输入值乘以 2。
  • 创建一个包含 3 个工作线程的线程池。
  • 使用列表推导式将不同的任务参数提交给线程池,得到一个 Future 对象列表。
  • 遍历 Future 对象列表,使用 try-except 语句捕获并处理可能抛出的异常,若没有异常则打印任务的执行结果。

8. example8_timeout_handling.py

from concurrent.futures import ThreadPoolExecutor
import timedef task(n):time.sleep(n)return nwith ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(task, 3)try:result = future.result(timeout=2)print(result)except TimeoutError:print("任务超时")

该代码用于设置线程池任务的超时时间。具体步骤如下:

  • 定义一个 task 函数,该函数会根据输入的秒数进行休眠,模拟耗时操作,最后返回输入值。
  • 创建一个包含 1 个工作线程的线程池。
  • 使用 submit 方法将 task 函数和参数 3 提交给线程池,获取一个 Future 对象。
  • 调用 Future 对象的 result 方法,并设置超时时间为 2 秒。若任务在 2 秒内未完成,会抛出 TimeoutError 异常,捕获该异常并打印提示信息。

9. example9_task_cancellation.py

from concurrent.futures import ThreadPoolExecutor
import timedef task(n):time.sleep(n)return nwith ThreadPoolExecutor(max_workers=1) as executor:future = executor.submit(task, 3)cancelled = future.cancel()if cancelled:print("任务已取消")else:print("任务无法取消")

此代码的主要功能是尝试取消线程池中的任务。具体实现步骤为:

  • 定义一个 task 函数,该函数会根据输入的秒数进行休眠,模拟耗时操作,最后返回输入值。
  • 创建一个包含 1 个工作线程的线程池。
  • 使用 submit 方法将 task 函数和参数 3 提交给线程池,获取一个 Future 对象。
  • 调用 Future 对象的 cancel 方法尝试取消任务,根据返回结果判断任务是否成功取消,并打印相应的提示信息。

10. example10_iterate_results.py

from concurrent.futures import ThreadPoolExecutordef task(x):return x * 3numbers = [1, 2, 3, 4, 5]
with ThreadPoolExecutor(max_workers=3) as executor:for result in executor.map(task, numbers):print(result)

该代码使用线程池的 map 方法批量处理任务,并迭代获取任务的执行结果。具体步骤如下:

  • 定义一个 task 函数,用于将输入值乘以 3。
  • 准备一个包含多个数值的列表 numbers
  • 创建一个包含 3 个工作线程的线程池。
  • 使用 map 方法将 task 函数应用到 numbers 列表的每个元素上,得到一个结果迭代器。
  • 遍历结果迭代器,打印每个任务的执行结果。

相关文章:

Python 线程池

Python 线程池 flyfish 线程池的概念 线程池是一种多线程处理形式,它预先创建了一定数量的线程,这些线程会被保存在一个线程池中。当有新的任务提交时,线程池会从池中取出一个空闲的线程来执行该任务;若池中没有空闲线程&#…...

【Linux】Bash是什么?怎么使用?

李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…...

蓝桥杯day2:解码异或 后的数组

一、题意 未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如,arr [1,0,2,1] 经编码后得到 encoded [1,2,3] 。 给你编码后的数组 encoded 和原数组 arr …...

R语言软件配置(自用)

①输入R: The R Project for Statistical Computing ②点击进入Cran镜像网页,选择清华大学镜像,选择自己合适的版本下载即可(以我电脑windows为例)。 ③点击base或者install R for the first time,然后选择Download R-4.4.3 for windows&…...

基于deepseek的智能语音客服【第二讲】后端异步接口调用封装

本篇内容主要讲前端请求(不包含)访问后端服务接口,接口通过检索知识库,封装提示词,调用deepseek的,并返回给前端的全过程,非完整代码,不可直接运行。 1.基于servlet封装异步请求 为…...

LEDNet总结

LEDNet:联合低光增强和暗光去模糊 1、暗光增强和去模糊可以单独处理,但是合并效果不理想。 研究问题的背景:光线不足 可见度颜色失真 最小快门速度有限 长时间曝光引起运动模糊 低光运动模糊同时存在 存在问题:暗光增强后运动模…...

线性规划的标准形式

标准形式的定义 目标函数:最大化线性目标函数 其中,x 是决策变量向量,c 是目标系数向量。 约束条件:等式形式约束 A x b, 其中,A 是约束系数矩阵,b 是常数项向量。 变量非负约束: 。 因此…...

xxl-job 执行器端服务器的简单搭建

xxl-job 执行器端服务器的简单搭建 先讲一下我们平时怎么使用 xxl-job 的,再引出背后是如何实现的。 我觉得对于一款成功的框架来说,好用,是非常重要的一个特性。 框架要便于接入,便于使用。对于用户来说,不要有太多…...

数字化企业可能会用到的系统有哪些?

你是否也曾像我一样,对这些问题充满疑问: 在企业数字化转型的浪潮中,究竟会涉及哪些系统? 这些系统又分别在何种情境下被投入使用? 如果你也有这样的疑问,那么这篇文章或许能为你答疑解惑。 为了给你一…...

【Linux】:守护进程化

朋友们、伙计们,我们又见面了,本期来给大家带来守护进程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…...

在 web 部署 YOLOv8目标检测(Django+html)

本文介绍如何将自己训练好的模型在网页上进行应用,使用 Django html 进行部署,能够对视频和图像进行识别,并显示到页面上,下面是一个效果: 上 传 和另外 7 个页面 - 个人 - Microsoft Edge 2025-03-13 21-52-06 下面进…...

程序员学商务英语之Making Business Calls

Dialogue-1 Reaching Somebody By Telephone电话找人 A: What do you think the secrect to success is? 你认为成功的秘诀是什么? B: Hold on to your dreams. 坚持你的梦想。 A: May I speak to your boss, Mr. Wong? 请你的老板,王先生接电话?…...

java项目之基于ssm的少儿编程在线培训系统(源码+文档)

项目简介 少儿编程在线培训系统实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 教师信息管理: 教师信息添加 教师信息删除 教师信息修改 课程信息管理: 课程信息添加 课程信息修改 课程信息删除 课程类型管理&…...

【初学者】Python语言中有没有指针类型?

李升伟 整理 在Python语言中,没有像C或C那样的显式指针类型。Python的设计哲学强调简洁和易读,因此它隐藏了许多底层的细节,包括指针。 不过,Python中的变量可以被视为对对象的引用。当你创建一个对象并将其赋值给一个变量时&am…...

RG-S3760应用协议配置

RG-S3760应用协议配置 1. dhcp 服务配置 提问:如何在设备上开启dhcp 服务,让不同VLAN 下的电脑获得相应的IP 地址? 回答: 步骤一:配置VLAN 网关IP 地址,及将相关端口划入相应的VLAN 中 S3760#con t S…...

C++基础 [八] - list的使用与模拟实现

目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…...

skywalking微服务链路追踪

是什么? skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点…...

K8S学习之基础三十七:prometheus监控node资源

Prometheus v2.2.1 ​ 编写yaml文件,包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…...

Web 小项目: 网页版图书管理系统

目录 最终效果展示 代码 Gitee 地址 1. 引言 2. 留言板 [热身小练习] 2.1 准备工作 - 配置相关 2.2 创建留言表 2.3 创建 Java 类 2.4 定义 Mapper 接口 2.5 controller 2.6 service 3. 图书管理系统 3.1 准备工作 - 配置相关 3.2 创建数据库表 3.2.1 创建用户表…...

1221. 四平方和 -蓝桥杯真题-哈希函数思想

原题链接:1221. 四平方和 - AcWing题库 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 44 个正整数的平方和。 如果把 00 包括进去,就正好可以表示为 44 个数的平方和。 比如: 对于一个给定的正整…...

为什么要学习人工智能(AI)?—— 未来已来,AI引领时代变革

未来已来,AI引领时代变革 在这个日新月异的时代,人工智能(AI)正以不可阻挡之势重塑着我们的世界。从教育的深耕细作到科研的突破创新,从行政的效率提升到管理的智慧化转型,AI技术如同一股强大的潮流&#x…...

Markdig:强大的 .NET Markdown 解析器详解

在现代开发中,Markdown 已经成为了一种广泛使用的轻量级标记语言,特别是在文档、博客和内容管理系统中,Markdown 为开发者提供了快速、简洁的格式化文本方式。而在 .NET 生态中,Markdig 是一款非常强大的 Markdown 解析器&#xf…...

云计算迁移革命:企业如何摆脱“单一云”锁定,构建自主云未来?

一场价值690亿美元的行业地震 2023年,博通(Broadcom)以690亿美元完成对VMware的收购,这不仅是企业IT历史上的一次天价并购,更在全球云计算市场掀起了一场深远的地震。VMware长期以来是企业数据中心的核心支柱&#xf…...

蓝桥杯篇---按键长按与双击

文章目录 前言1. 新增全局变量和宏定义解释1.1宏定义KEY_EVENT_*DEBOUNCE_TIMEHOLD_TIMEDOUBLE_TIMEMULTI_TIME 1.2全局变量Key_ValKey_OldKey_DownKey_Upsys_tickkey_eventkey_pressedkey_press_startkey_last_releaseclick_cnt 2. 定时器初始化(1ms中断&#xff0…...

created在vue3 script setup中的写法

在 Vue 2 里&#xff0c;created 是一个生命周期钩子函数&#xff0c;会在实例已经创建完成之后被调用&#xff0c;主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里&#xff0c;不再有像 Vue 2 那样直…...

基于springboot的房屋租赁系统(008)

摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符…...

Linux上的`i2c-tools`工具集的编译构建和安装

源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接&#xff1a; https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…...

java项目之基于ssm的社区流浪动物救助领养系统

项目简介 社区流浪动物救助领养系统实现了以下功能&#xff1a; 本社区流浪动物救助领养系统分为管理员还有用户两个权限&#xff0c;管理员可以管理用户的基本信息内容&#xff0c;可以管理回访信息以及回访的租赁信息&#xff0c;能够与用户进行相互交流等操作&#xff0c;…...

网络空间安全(34)安全防御体系

前言 安全防御体系是一个多层次、多维度的系统&#xff0c;旨在保护组织或个人的信息资产免受各种网络攻击和威胁。 一、技术层面 网络边界防御 防火墙&#xff1a;部署在网络边界&#xff0c;通过设定规则允许或阻止特定流量的进出&#xff0c;保护内部网络不受外部攻击。入侵…...

《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》

一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统&#xff0c;由一个服务器和多个客户端组成。客户端可以连接到服务器&#xff0c;向服务器发送消息&#xff0c;服务器接收到消息后将其转发给其他客户端&#xff0c;实现多人之间的实时聊天。系统使用 C 语言编写&#x…...

知识蒸馏:让大模型“瘦身”的魔法

知识蒸馏&#xff1a;让大模型“瘦身”的魔法 什么是蒸馏模型&#xff1f;AI界的“知识浓缩术”核心定义传统训练 vs 知识蒸馏关键优势 DeepSeek的蒸馏“三步魔法”骨架提取——搭建“迷你版大脑”知识灌注——模仿教师的“思考过程”微调优化——针对场景“查漏补缺” DeepSee…...

MySQL数据库精研之旅第一期:开启数据管理新旅程

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、数据库简介 1.1. 数据库的概念 1.2. 数据库和数据结构的关系 1.3. 主流数据库 1.3.1. 关系型数据库 1.3.2. 非关系型数据库 1.4. 关系型数据库的概念 二、MySQL配置 2.1. mysqld服务端程序 …...

Linux复习——基础IO,认识文件描述符、软硬件链接

1.复习C文件接口 1.1 fopen FILE *fopen(const char *path, const char *mode); path&#xff1a;带路径的文件名称(待打开的文件) mode&#xff1a; r&#xff1a;以可读方式打开&#xff0c;不可写&#xff0c;文件不存在&#xff0c;则报错 r&…...

【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计

欢迎来到Java集合框架系列的第一篇文章&#xff01;&#x1f339; 本系列文章将以通俗易懂的语言&#xff0c;结合实际开发经验&#xff0c;带您深入理解Java集合框架的设计智慧。&#x1f339; 若文章中有任何不准确或需要改进的地方&#xff0c;欢迎大家指出&#xff0c;让我…...

Prometheus使用

介绍&#xff1a;Prometheus 是一个开源的 监控与告警系统&#xff0c;主要用于采集和存储时间序列数据&#xff08;Time Series Data&#xff09; Prometheus的自定义查询语言PromQL Metric类型 为了能够帮助用户理解和区分这些不同监控指标之间的差异&#xff0c;Prometheu…...

Java学习打卡-Day19-Set、HashSet、LinkedHashSet

Set 接口 无序&#xff08;添加和取出顺序不一致&#xff09;&#xff08;但取出顺序固定&#xff09;。没有索引。不允许重复&#xff0c;所以最多一个null。遍历方式 迭代器增强for循环不能使用普通for循环索引方式。 HashSet 实现了Set接口&#xff0c;具有相应特征。底…...

冯・诺依曼架构深度解析

一、历史溯源&#xff1a;计算机科学的革命性突破 1.1 前冯・诺依曼时代 在 1940 年代之前&#xff0c;计算机领域呈现 "百家争鸣" 的格局&#xff1a; 哈佛 Mark I&#xff08;1944&#xff09;&#xff1a;采用分离的指令存储与数据存储ENIAC&#xff08;1946&a…...

单片机学完开发板,如何继续提升自己的技能?

很多人学完开发板后都会卡在一个尴尬的阶段&#xff1a;觉得自己会的东西不少&#xff0c;但又不知道下一步该干啥。会点C语言&#xff0c;能烧录程序&#xff0c;能点亮LED&#xff0c;玩转按键&#xff0c;搞定串口等等&#xff0c;能用开发板做点小玩意儿&#xff0c;但面对…...

Nginx 日志格式

默认日志格式配置 log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for";该格式记录了客户端IP、用户、时间、请求、状态…...

Spring Boot 整合 Elasticsearch 实践:从入门到上手

引言 Elasticsearch 是一个开源的分布式搜索引擎&#xff0c;广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程&#xff0c;在 Spring Boot 项目中整合 Elasticsearch&#xff0c;轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先&#xff…...

STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构

目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层&#xff08;Perception Layer&#xff09; 2. 网络层&#xff08;Network Layer&#xff09; …...

SARAD 解读

出处&#xff1a;NIPS 2024 代码链接&#xff1a;https://github.com/daidahao/SARAD/ 一 文章动机 ① 时间建模&#xff08;Temporal Modeling&#xff09;的局限性&#xff1a; a. 时间维度上 感受野极小&#xff1b;b. 变量间时间戳错位 (时间建模、空间建模不统一) →…...

【愚公系列】《高效使用DeepSeek》017-知识点思维导图生成

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

【linux】scp和rsync

scp 和 rsync 都是 Linux 系统中用于文件传输的命令行工具&#xff0c;它们都可以通过网络在本地和远程主机之间传输文件。 scp 命令 定义 scp 是 “secure copy” 的缩写&#xff0c;它是一个基于 SSH 协议的文件传输工具&#xff0c;用于在本地和远程主机之间安全地复制文…...

软件需求分类、需求获取(高软46)

系列文章目录 软件需求分类&#xff0c;需求获取 文章目录 系列文章目录前言一、软件需求二、获取需求三、真题总结 前言 本节讲明软件需求分类、需求获取的相关知识。 一、软件需求 二、获取需求 三、真题 总结 就是高软笔记&#xff0c;大佬请略过&#xff01;...

蓝桥杯单片机之AT24C02(基于自己对AT24C02的学习和理解)

一、先用抽象法说明原理&#xff0c;让原理变得简单易懂&#xff1a; 1、向AT24C02写入数据&#xff1a; 有个关系户&#xff0c;他想安排自己的儿子进某个大厦里某个楼层的公司&#xff0c;那么他就要先找到这个公司的地址&#xff0c;然后再找到该公司是第几楼&#xff0c;最…...

【Qt】Qt + Modbus 服务端学习笔记

《Qt Modbus 服务端学习笔记》 1.因为项目的需要&#xff0c;要写一个modbus通信&#xff0c;csdn上感觉有些回答&#xff0c;代码是人工智能生成的&#xff0c;有些细节不对。我这个经过实测&#xff0c;是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…...

抖音用户视频批量下载工具开发全解析

一、逆向工程原理剖析 1.1 抖音Web端防护体系 抖音采用五层防御机制保护数据接口: graph LRA[浏览器指纹检测] --> B[请求参数签名]B --> C[Cookie动态验证]C --> D[请求频率限制]D --> E[IP信誉评级] 1.2 核心参数解密 参数名称作用原理生成方式有效期x-bogu…...

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…...

清晰易懂的 Swift 安装与配置教程

初学者也能看懂的 Swift 安装与配置教程 本教程将手把手教你如何在 macOS 系统上安装 Swift&#xff0c;配置依赖包缓存位置&#xff0c;并指出新手容易踩坑的细节。即使你是零基础小白&#xff0c;也能快速上手&#xff01; 一、安装 Swift&#xff08;macOS 环境&#xff09…...