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 解析器…...
云计算迁移革命:企业如何摆脱“单一云”锁定,构建自主云未来?
一场价值690亿美元的行业地震 2023年,博通(Broadcom)以690亿美元完成对VMware的收购,这不仅是企业IT历史上的一次天价并购,更在全球云计算市场掀起了一场深远的地震。VMware长期以来是企业数据中心的核心支柱…...
蓝桥杯篇---按键长按与双击
文章目录 前言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中断࿰…...
created在vue3 script setup中的写法
在 Vue 2 里,created 是一个生命周期钩子函数,会在实例已经创建完成之后被调用,主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里,不再有像 Vue 2 那样直…...
基于springboot的房屋租赁系统(008)
摘 要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符…...
Linux上的`i2c-tools`工具集的编译构建和安装
源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接: https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…...
java项目之基于ssm的社区流浪动物救助领养系统
项目简介 社区流浪动物救助领养系统实现了以下功能: 本社区流浪动物救助领养系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理回访信息以及回访的租赁信息,能够与用户进行相互交流等操作,…...
网络空间安全(34)安全防御体系
前言 安全防御体系是一个多层次、多维度的系统,旨在保护组织或个人的信息资产免受各种网络攻击和威胁。 一、技术层面 网络边界防御 防火墙:部署在网络边界,通过设定规则允许或阻止特定流量的进出,保护内部网络不受外部攻击。入侵…...
《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统,由一个服务器和多个客户端组成。客户端可以连接到服务器,向服务器发送消息,服务器接收到消息后将其转发给其他客户端,实现多人之间的实时聊天。系统使用 C 语言编写&#x…...
知识蒸馏:让大模型“瘦身”的魔法
知识蒸馏:让大模型“瘦身”的魔法 什么是蒸馏模型?AI界的“知识浓缩术”核心定义传统训练 vs 知识蒸馏关键优势 DeepSeek的蒸馏“三步魔法”骨架提取——搭建“迷你版大脑”知识灌注——模仿教师的“思考过程”微调优化——针对场景“查漏补缺” DeepSee…...
MySQL数据库精研之旅第一期:开启数据管理新旅程
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、数据库简介 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:带路径的文件名称(待打开的文件) mode: r:以可读方式打开,不可写,文件不存在,则报错 r&…...
【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计
欢迎来到Java集合框架系列的第一篇文章!🌹 本系列文章将以通俗易懂的语言,结合实际开发经验,带您深入理解Java集合框架的设计智慧。🌹 若文章中有任何不准确或需要改进的地方,欢迎大家指出,让我…...
Prometheus使用
介绍:Prometheus 是一个开源的 监控与告警系统,主要用于采集和存储时间序列数据(Time Series Data) Prometheus的自定义查询语言PromQL Metric类型 为了能够帮助用户理解和区分这些不同监控指标之间的差异,Prometheu…...
Java学习打卡-Day19-Set、HashSet、LinkedHashSet
Set 接口 无序(添加和取出顺序不一致)(但取出顺序固定)。没有索引。不允许重复,所以最多一个null。遍历方式 迭代器增强for循环不能使用普通for循环索引方式。 HashSet 实现了Set接口,具有相应特征。底…...
冯・诺依曼架构深度解析
一、历史溯源:计算机科学的革命性突破 1.1 前冯・诺依曼时代 在 1940 年代之前,计算机领域呈现 "百家争鸣" 的格局: 哈佛 Mark I(1944):采用分离的指令存储与数据存储ENIAC(1946&a…...
单片机学完开发板,如何继续提升自己的技能?
很多人学完开发板后都会卡在一个尴尬的阶段:觉得自己会的东西不少,但又不知道下一步该干啥。会点C语言,能烧录程序,能点亮LED,玩转按键,搞定串口等等,能用开发板做点小玩意儿,但面对…...
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 是一个开源的分布式搜索引擎,广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程,在 Spring Boot 项目中整合 Elasticsearch,轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先ÿ…...
STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构
目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层(Perception Layer) 2. 网络层(Network Layer) …...
SARAD 解读
出处:NIPS 2024 代码链接:https://github.com/daidahao/SARAD/ 一 文章动机 ① 时间建模(Temporal Modeling)的局限性: a. 时间维度上 感受野极小;b. 变量间时间戳错位 (时间建模、空间建模不统一) →…...
【愚公系列】《高效使用DeepSeek》017-知识点思维导图生成
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
【linux】scp和rsync
scp 和 rsync 都是 Linux 系统中用于文件传输的命令行工具,它们都可以通过网络在本地和远程主机之间传输文件。 scp 命令 定义 scp 是 “secure copy” 的缩写,它是一个基于 SSH 协议的文件传输工具,用于在本地和远程主机之间安全地复制文…...
软件需求分类、需求获取(高软46)
系列文章目录 软件需求分类,需求获取 文章目录 系列文章目录前言一、软件需求二、获取需求三、真题总结 前言 本节讲明软件需求分类、需求获取的相关知识。 一、软件需求 二、获取需求 三、真题 总结 就是高软笔记,大佬请略过!...
蓝桥杯单片机之AT24C02(基于自己对AT24C02的学习和理解)
一、先用抽象法说明原理,让原理变得简单易懂: 1、向AT24C02写入数据: 有个关系户,他想安排自己的儿子进某个大厦里某个楼层的公司,那么他就要先找到这个公司的地址,然后再找到该公司是第几楼,最…...
【Qt】Qt + Modbus 服务端学习笔记
《Qt Modbus 服务端学习笔记》 1.因为项目的需要,要写一个modbus通信,csdn上感觉有些回答,代码是人工智能生成的,有些细节不对。我这个经过实测,是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…...
抖音用户视频批量下载工具开发全解析
一、逆向工程原理剖析 1.1 抖音Web端防护体系 抖音采用五层防御机制保护数据接口: graph LRA[浏览器指纹检测] --> B[请求参数签名]B --> C[Cookie动态验证]C --> D[请求频率限制]D --> E[IP信誉评级] 1.2 核心参数解密 参数名称作用原理生成方式有效期x-bogu…...
DeepSeek写打台球手机小游戏
DeepSeek写打台球手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件: 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…...
清晰易懂的 Swift 安装与配置教程
初学者也能看懂的 Swift 安装与配置教程 本教程将手把手教你如何在 macOS 系统上安装 Swift,配置依赖包缓存位置,并指出新手容易踩坑的细节。即使你是零基础小白,也能快速上手! 一、安装 Swift(macOS 环境)…...