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

18. LangChain分布式任务调度:大规模应用的性能优化

引言:从单机到万级并发的进化

2025年某全球客服系统通过LangChain分布式改造,成功应对黑五期间每秒12,000次的咨询请求。本文将基于LangChain的分布式架构,详解如何实现AI任务的自动扩缩容与智能调度。


一、分布式系统核心指标
1.1 性能基准对比(万级QPS测试)
架构吞吐量(QPS)P99延迟容错率
单机版1,2002.1s98.5%
分布式28,000680ms99.99%
1.2 LangChain分布式组件


二、四步构建分布式AI系统
2.1 安装必要库
pip install langchain celery redis flower  # 任务队列+监控
2.2 分布式架构(Celery + LangChain)
config.py - Celery 配置
# 使用Redis作为消息中间件broker_url = "redis://localhost:6379/0"result_backend = "redis://localhost:6379/1"​# 任务路由配置task_routes = {"tasks.simple_task": {"queue": "cpu_queue"},"tasks.complex_task": {"queue": "gpu_queue"}}
tasks.py - 分布式任务定义
from celery import Celeryfrom langchain_ollama import ChatOllama​app = Celery("distributed_langchain", broker="redis://localhost:6379/0")app.config_from_object("config")​@app.task(bind=True, queue="cpu_queue")def simple_task(self, query: str):try:llm = ChatOllama(model="qwen3")response = llm.invoke(query)return str(response)  # 限制输入长度except Exception as e:self.retry(exc=e, countdown=60)  # 失败后60秒重试​@app.task(bind=True, queue="gpu_queue")def complex_task(self, doc: str):try:llm = ChatOllama(model="qwen3:14B")response = llm.invoke(doc)return str(response)except Exception as e:self.retry(exc=e, countdown=120)
2.3 动态扩缩容方案
方案1:Celery自动扩缩容
 # 启动CPU工作节点(自动伸缩2-8个进程)celery -A tasks worker --queues=cpu_queue --autoscale=8,2​# 启动GPU工作节点(固定2个进程)celery -A tasks worker --queues=gpu_queue --concurrency=2

方案2:Kubernetes扩缩容(HPA配置)
# hpa.yamlapiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata:name: celery-workerspec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: celery-workerminReplicas: 3maxReplicas: 20metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 70
2.4 跨区域部署
global_balancer.py - 地域路由
import requests
from geopy.distance import geodesic​REGION_ENDPOINTS = {"us-east": "http://nyc-task-server:5000","eu-central": "http://frankfurt-task-server:5000","ap-southeast": "http://singapore-task-server:5000"}​def get_nearest_region(user_ip: str):# 模拟:根据IP定位返回最近区域(实际可用GeoIP库)ip_to_region = {"1.1.1.1": "ap-southeast","2.2.2.2": "eu-central"}return ip_to_region.get(user_ip, "us-east")​def dispatch_globally(query: str, user_ip: str):region = get_nearest_region(user_ip)response = requests.post(f"{REGION_ENDPOINTS[region]}/process",json={"query": query})return response.json()
2.4 监控
# 启动Flower监控面板celery -A tasks flower --port=5555
2.5 调用任务
from tasks import simple_task, complex_task# 同步调用(阻塞等待结果)
result = simple_task.delay("Hello CPU")  # 自动路由到cpu_queue
print(result.get(timeout=10))  # 获取结果# 异步调用(不阻塞)
async_result = complex_task.delay("Long GPU task")  
print(f"Task ID: {async_result.id}")  # 先获取任务ID

输出为:

content='<think>\nOkay, the user greeted me with "Hello CPU." First, I need to acknowledge their greeting in a friendly manner. Since I\'m Qwen, I should clarify that I\'m an AI assistant, not a CPU. CPUs are physical components in computers, while I\'m a software-based AI.\n\nI should keep the response simple and conversational. Maybe add an emoji to make it more approachable. Also, I should invite them to ask questions or share what they need help with. Let me check if there\'s any technical jargon I should avoid. No, keep it straightforward. Make sure the tone is warm and helpful. Alright, that should cover it.\n</think>\n\nHello! I\'m Qwen, an AI assistant developed by Alibaba Cloud. While I\'m not a CPU (Central Processing Unit), I can help you with a wide range of tasks and answer questions. How can I assist you today? 😊' additional_kwargs={} response_metadata={'model': 'qwen3', 'created_at': '2025-04-30T13:25:35.313642868Z', 'done': True, 'done_reason': 'stop', 'total_duration': 5273378538, 'load_duration': 20732354, 'prompt_eval_count': 10, 'prompt_eval_duration': 9243262, 'eval_count': 187, 'eval_duration': 5242734922, 'message': Message(role='assistant', content='', images=None, tool_calls=None)} id='run-e923dc05-aaed-4995-a95c-e87c56075135-0' usage_metadata={'input_tokens': 10, 'output_tokens': 187, 'total_tokens': 197}
Task ID: 9eeff3e1-c722-435b-9279-ff7105bfc375

三、企业级案例:全球客服系统
3.1 架构设计
3.2 关键优化效果
指标单区域部署全球分布式
平均延迟1.8s420ms
峰值处理能力5,000 QPS28,000 QPS
月度故障时间46分钟28秒

四、避坑指南:分布式七大陷阱
  1. 数据倾斜:热点任务堆积 → 一致性哈希分片

  2. 脑裂问题:网络分区导致状态不一致 → 分布式锁+心跳检测

  3. 雪崩效应:级联故障 → 熔断降级机制

  4. 版本地狱:节点环境差异 → 容器化+版本强校验

  5. 监控盲区:跨集群指标分散 → 全局聚合看板

  6. 成本失控:无限制扩缩容 → 预算约束策略

  7. 安全漏洞:节点间未加密通信 → mTLS双向认证


下期预告

《安全与伦理:如何避免模型"幻觉"与数据泄露?》

  • 揭秘:大模型生成虚假信息的底层机制

  • 实战:构建合规的企业级AI应用

  • 陷阱:GDPR与数据主权冲突


分布式系统不是简单的机器堆砌,而是精密的技术交响乐。记住:优秀的设计,既要像蚂蚁军团般协同,又要像瑞士钟表般可靠!

相关文章:

18. LangChain分布式任务调度:大规模应用的性能优化

引言&#xff1a;从单机到万级并发的进化 2025年某全球客服系统通过LangChain分布式改造&#xff0c;成功应对黑五期间每秒12,000次的咨询请求。本文将基于LangChain的分布式架构&#xff0c;详解如何实现AI任务的自动扩缩容与智能调度。 一、分布式系统核心指标 1.1 性能基准…...

C/C++工程师使用 DeepSeek

一、使用 DeepSeek 生成 C/C 代码 在 C/C 开发中&#xff0c;很多时候需要编写一些常见功能的代码&#xff0c;如排序算法、文件读写操作、数据结构的实现等。借助 DeepSeek&#xff0c;工程师只需用自然语言清晰描述需求&#xff0c;它就能依据大量的代码数据和深度学习算法&a…...

数据结构-线性结构(链表、栈、队列)实现

公共头文件common.h #define TRUE 1 #define FALSE 0// 定义节点数据类型 #define DATA_TYPE int单链表C语言实现 SingleList.h #pragma once#include "common.h"typedef struct Node {DATA_TYPE data;struct Node *next; } Node;Node *initList();void headInser…...

第 7 篇:跳表 (Skip List):简单务实的概率性选手

前面几篇我们都在探讨各种基于“树”结构的有序表实现&#xff0c;它们通过精巧的平衡策略&#xff08;高度、颜色、大小&#xff09;和核心的“旋转”操作来保证 O(log N) 的性能。今天&#xff0c;我们要介绍一位画风完全不同的选手——跳表 (Skip List)。它不依赖树形结构&a…...

sys目录介绍

文章目录 1. 前言2. 目录层次3. 目录介绍3.1 devices 目录3.2 block 目录3.3 bus 目录3.4 class 目录3.5 dev 目录3.6 firmware目录3.7 fs 目录3.8 kernel目录3.9 module 目录3.10 power 目录 sys目录介绍 1. 前言 linux 下一切皆文件&#xff0c;文件的类型也很多&#xff0c;…...

基于DQN的自动驾驶小车绕圈任务

1.任务介绍 任务来源: DQN: Deep Q Learning &#xff5c;自动驾驶入门&#xff08;&#xff1f;&#xff09; &#xff5c;算法与实现 任务原始代码: self-driving car 最终效果&#xff1a; 以下所有内容&#xff0c;都是对上面DQN代码的改进&#…...

源码安装SRS4

Ubuntu20安装好SRS后&#xff0c;&#xff08;源码安装&#xff09; 注意&#xff1a;在trunk目录SRS ./objs/srs -c conf/srs.conf 以上为启动srs命令&#xff0c;-c 为指定配置文件&#xff0c; 查看SRS进程 ps aux | grep srs 查看端口&#xff1a; netstat -ano | gre…...

OrbitControls

OrbitControls 3D虚拟工厂在线体验 描述 Orbit controls&#xff08;轨道控制器&#xff09;可以使得相机围绕目标进行轨道运动。 Constructor OrbitControls( object : Camera, domElement : HTMLDOMElement ) 参数类型描述objectCamera&#xff08;必须&#xff09;将要…...

【数据库】四种连表查询:内连接,外连接,左连接,右连接

在数据库操作中&#xff0c;连表查询是处理多表关联的核心技术。以下是四种主要连接方式的详细介绍、快速掌握方法及实际应用指南&#xff1a; 目录 **一、四种连表查询详解****1. 内连接&#xff08;INNER JOIN&#xff09;****2. 左连接&#xff08;LEFT JOIN / LEFT OUTER J…...

Redis怎么避免热点数据问题

使用 RedisTemplate 避免热点数据问题的解决方案、场景及示例&#xff1a; 1. 数据分片&#xff08;Sharding&#xff09; 场景&#xff1a;高频读写的计数器&#xff08;如文章阅读量统计&#xff09; ​原理​&#xff1a;将数据分散到多个子键&#xff0c;降低单个 Key 的压…...

完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库

完整的 VS Code CMake Qt GCC 项目构建方案&#xff1a;EXE 程序与多个 DLL 库 在本文中&#xff0c;我们将介绍如何构建一个包含 EXE 程序和多个 DLL 库的项目&#xff0c;适用于 VS Code CMake Qt GCC 开发环境。这个方案为一个模块化的项目结构&#xff0c;使得代码清…...

Python 数据智能实战 (7):智能流失预警 - 融合文本反馈

写在前面 —— 不再错过关键预警!结合用户行为与 LLM 文本洞察,构建更精准的流失预测模型 在之前的探索中,我们学习了如何利用大语言模型 (LLM) 对用户评论进行深度挖掘,提取情感、发现主题,并将非结构化的文本信息转化为有价值的特征 (如 Embeddings)。 现在,我们要将…...

Flutter - 概览

Hello world ⌘ shift p 选择 Empty Application 模板 // 导入Material风格的组件包 // 位置在flutter安装目录/packages/flutter/lib/material.dart import package:flutter/material.dart;void main() {// runApp函数接收MainApp组件并将这个Widget作为根节点runApp(cons…...

Python-pandas-操作Excel文件(读取数据/写入数据)及Excel表格列名操作详细分享

Python-pandas-操作Excel文件(读取数据/写入数据) 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&#xff1a;每…...

手写 Vue 源码 === Vue3 设计思想

1.声明式框架 Vue3 是声明式的框架,用起来简单。 命令式和声明式区别 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了 Vuejs 中,过程靠 vuejs 来实现声明式代码更加简单,不需要关注实现,按照要求填代…...

Android WebView加载h5打开麦克风与摄像头的权限问题

目录 快速处理 app向系统申请录音与相机权限h5向app申请录音和相机权限 详细解答 app权限与h5权限录音与麦克风默许的风险最佳实践 Android webview h5 麦克风权限&#xff0c;摄像头&#xff08;相机&#xff09;权限实现与填坑。 快速处理 app向系统申请录音与相机权限 …...

三种计算最小公倍数的方法分析

三种计算最小公倍数的方法分析与比较 一.引言 最小公倍数&#xff08;Least Common Multiple, LCM&#xff09;是数学中的一个基本概念&#xff0c;指能够被两个或多个整数整除的最小的正整数。在编程中&#xff0c;我们有多种方法可以计算两个数的最小公倍数。本文将分析三种…...

PDF转换工具xpdf-tools-4.05

XPDF是一个开源的PDF查看、提取和转换工具套件&#xff0c;使用C编写&#xff0c;支持多种操作系统&#xff0c;包括Linux、Unix、OS/2、Windows和Mac OS X‌1。XPDF不仅是一个PDF查看器&#xff0c;还包含多个实用工具&#xff0c;如文本提取器、图像转换器和HTML转换器等‌&a…...

aws(学习笔记第四十课) image-content-search

aws(学习笔记第四十课) image-content-search 使用SQS Lambda集成 数据库&#xff08;Aurora Serverless&#xff09; Cognito&#xff08;用户管理&#xff09; rekognition&#xff08;图像解析&#xff09; 学习内容&#xff1a; 使用SQS Lambda Aurora Serverless Cog…...

GPT-4o 图像生成与八个示例指南

什么是GPT-4o图像生成&#xff1f; 简单来说&#xff0c;GPT-4o图像生成是集成在ChatGPT内部的一项功能。用户可以直接在对话中&#xff0c;通过文本描述&#xff08;Prompt&#xff09;来创建、编辑和调整图像。这与之前的图像生成工具相比&#xff0c;体验更流畅、交互性更强…...

PostgreSQL 查看表膨胀情况的方法

PostgreSQL 查看表膨胀情况的方法 表膨胀(Table Bloat)是PostgreSQL中由于MVCC机制导致的一种常见现象&#xff0c;当大量数据被更新或删除后&#xff0c;表中会积累"死元组"(dead tuples)&#xff0c;这些死元组占据空间但不可见&#xff0c;导致表实际占用的磁盘空…...

从 0 到 1!深度剖析项目实施流程,开启项目管理新视野

一、项目准备 / 前期准备 &#xff08;一&#xff09;跟销售进行项目交接 对接人&#xff1a;销售人员交接会议内容&#xff1a; 了解项目背景、客户基本信息、项目版本、具备二次开发功能、接口、了解合同信息等。明确项目情况、客户基本情况、使用软件&#xff08;版本&…...

书生实战营之沐曦专场

一&#xff1a;实验环境进入和启动实验容器(D.run平台) 1.1首先进入平台进行注册 D.run平台https://console.d.run/ 注册和登录环节就跳过了。 1.2 启动实验容器--详细步骤如下 1.2.1选择容器的名称、区域、镜像&#xff08;注意镜像必须选择Dlinfer&#xff09; 1.2.2可以选…...

在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行

最近在学习Hadoop集群map reduce分布运算过程中&#xff0c;经多方面排查可能是电脑本身配置的原因导致每次运行都会报“No such file or directory”的错误&#xff0c;最后我是通过打包文件到虚拟机里运行得到结果&#xff0c;具体步骤如下&#xff1a; 前提是要保证maven已经…...

基于YOLOV5的目标检测识别

基于YOLOV5的目标检测识别 舰船目标检测口罩目标检测飞机目标检测 舰船目标检测 口罩目标检测 飞机目标检测...

第4篇:服务层抽象与复用逻辑

在业务系统复杂度指数级增长的今天&#xff0c;服务层&#xff08;Service Layer&#xff09;的合理设计直接影响着系统的可维护性和扩展性。本文将深入剖析 Egg.js 框架中的服务层架构设计&#xff0c;从基础实现到高级封装&#xff0c;全方位讲解企业级应用的开发实践。 一、…...

多模态大语言模型arxiv论文略读(五十四)

RoboMP 2 ^2 2: A Robotic Multimodal Perception-Planning Framework with Multimodal Large Language Models ➡️ 论文标题&#xff1a;RoboMP 2 ^2 2: A Robotic Multimodal Perception-Planning Framework with Multimodal Large Language Models ➡️ 论文作者&#xff…...

中小企业MES系统详细设计

版本&#xff1a;V1.1 日期&#xff1a;2025年5月2日 一、设备协议兼容性设计 1.1 设备接入框架 #mermaid-svg-PkwqEMRIIlIBPP58 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PkwqEMRIIlIBPP58 .error-icon{fill…...

第二十周:项目开发中遇到的相关问题(一)

自十九周开始&#xff0c;我们便开始着手写项目&#xff08;关于新闻资讯类的Web项目&#xff09;&#xff0c;当然&#xff0c;在这之中我们也学到了很多高效且有用的好技术&#xff0c;在接下来的内容中将去具体的描述这些好技术&#xff0c;介绍它们的具体用法和应用场景。本…...

WebRtc10: 端对端1v1传输基本流程

媒体能力协商过程 RTCPeerConnection&#xff08;核心类&#xff09; 基本格式 pc new RTCPeerConnection([configiration]); RTCPeerConnection方法分类 媒体协商Stream/Track传输相关方法统计相关方法 媒体协商过程 协商状态变化 媒体协商方法 createOffercreateAnswe…...

【云备份】配置文件加载模块

目录 一.为什么要配置文件 二.配置文件的实现 三.单例文件配置类设计 四.源码 一.为什么要配置文件 我们将服务端程序运行中用到的一些关键信息保存到配置文件中&#xff0c;这样可以使程序的运行更加灵活。 这样做的好处是&#xff0c;未来如果我们想要修改一些关键信息&…...

重构之道:识别并替换不合适使用的箭头函数

1、引言 JavaScript 自 ES6 引入了箭头函数(Arrow Function)后,因其简洁的语法和对 this 的词法绑定机制,迅速成为开发者喜爱的写法之一。然而,并不是所有场景都适合使用箭头函数。 在实际开发中,我们常常会因为追求代码简洁而忽视其潜在问题,例如: this 指向错误不适…...

git问题记录-如何切换历史提交分支,且保留本地修改

问题记录 我在本地编写了代码&#xff0c;突然想查看之前提交的代码&#xff0c;并且想保留当前所在分支所做的修改 通过git stash对本地的代码进行暂存 使用git checkout <commit-hash>切换到之前的提交记录。 查看完之后我想切换回来&#xff0c;恢复暂存的本地代码…...

【MySQL】事务管理

事务管理 一. 事务的概念二. 事务的特征三. 事务的版本支持四. 事务的提交方式五. 事务的常见操作六. 事务的隔离级别1. 查看与设置隔离级别2. 读未提交 (Read Uncommitted)3. 读提交 (Read Committed)4. 可重复读 (Repeatable Read)5. 串行化 (Serializable)6. 隔离级别的总结…...

【点对点协议(PPP)全解析】从原理到工程实践

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心配置实现案例1&#xff1a;基础PPP链路建立案例2&#xff1a;CHAP认证配置 运行结果验证 三、性能对比测试…...

环境搭建:开启 Django 开发之旅

一、环境搭建&#xff1a;开启 Django 开发之旅 &#xff08;一&#xff09;安装 Python 先确保电脑上装有 Python 3.6 及以上版本&#xff0c;Django 5.1 的话&#xff0c;至少得 Python 3.8 哦。 安装前&#xff0c;先查下有没有装过 Python &#xff0c;终端&#xff08;Wi…...

如何配置NGINX作为反向代理服务器来缓存后端服务的响应?

大家好&#xff0c;我是锋哥。今天分享关于【如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…...

【Java IO流】File类基础详解

参考笔记&#xff1a;java File类基础 万字详解&#xff08;通俗易懂&#xff09;-CSDN博客 目录 1.前言 2. File类介绍 3. File类构造方法 4.File类常用的方法案例演示 4.1 创建文件/文件夹的方法 4.2 删除文件/文件夹的方法 4.3 判断文件/文件夹是否存在的方法 4.4 …...

《C#数据结构与算法》—201线性表

线性表的实现方式 顺序表 线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素&#xff0c;用这种方式存储的线性表叫顺序表。 特点&#xff1a;表中相邻的数据元素在内存中存储位置也相邻。 顺序表接口实现&#xff1a; 方法名参数返回值描述GetLen…...

MATLAB绘制局部放大图

今天&#xff0c;我将分享一段 MATLAB 代码&#xff0c;该代码生成了一个主副图结合的可视化展示&#xff0c;用于比较不同控制系统性能表现。 clc; clear; close all;% 生成时间向量 t 0:0.1:12;% 生成模拟数据 zero_feedback 0.5 * ones(size(t)); % 恒定…...

TS 常用类型

JS不会检查变量类型的变化 给变量规定特定的数据类型&#xff0c;错误赋值时会报错 优势&#xff1a;TS会标记出代码中的意外行为&#xff0c;尤其是typeerrors 具体实现&#xff1a;类型注解 JS和TS中数据类型的变化...

[Control-Chaos] Toxic Cascade(毒性級鏈)

信息 信息描述靶場名稱Toxic Cascade地址GitHub: Toxic Cascade難度中等人數推薦1人類型CTF、APT 攻擊模擬、故事解謎、化工工程與逆向工程描述Toxic Cascade 是一個結合 CTF、APT 攻擊模擬、故事解謎、化工工程與逆向工程的高度沉浸式靶場。該靶場具有獨特的情境背景與模擬真…...

纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳

1. 引言 近期测试了纳米AI搜索的MCP工具功能&#xff0c;重点体验了其智能体在报告生成和社交媒体数据分析方面的表现。平台整合了100多个MCP工具&#xff0c;通过本地化部署的方式&#xff0c;为用户提供了不同于云端方案的操作体验。本文将分享实际测试结果&#xff0c;包括智…...

React useMemo函数

第一个参数是回调函数&#xff0c;返回计算的结果&#xff0c;第二个参数是依赖项&#xff0c;该函数只监听count1变量的变化 import { useReducer, useState } from react; import ./App.css;// 定义一个Reducer函数 根据不同的action进行不同的状态修改 function reducer(st…...

第 1 篇:起点的选择:为何需要超越数组与链表?

大家好&#xff0c;欢迎来到“数据结构选型指南”系列&#xff01;在软件开发中&#xff0c;数据是核心&#xff0c;而如何高效地组织和访问这些数据&#xff0c;则是程序性能的关键。选择合适的数据结构&#xff0c;就像为你的 Java 应用选择最优的“引擎零件”。今天&#xf…...

MySQL 索引不生效的情况

MySQL 索引不生效的 SQL 查询需要避免的情况 索引是提高 MySQL 查询性能的关键&#xff0c;但某些 SQL 写法会导致索引失效&#xff0c;从而影响查询效率。以下是需要避免的常见情况&#xff1a; 1. 使用 NOT、! 或 <> 操作符 -- 索引可能失效 SELECT * FROM users WH…...

【阿里云大模型高级工程师ACP学习笔记】2.9 大模型应用生产实践 (上篇)

特别说明:由于这一章节是2025年3月官方重点更新的部分,新增内容非常多,因此我不得不整理成上、下两篇,方便大家参考。 学习目标 备考阿里云大模型高级工程师ACP认证,旨在全面掌握大模型应用生产实践的专业知识,提升在该领域的实操技能与理论水平,为职业发展增添助力。具…...

STM32 ZIBEE DL-20 无线串口模块

一.配置方法 二.串口中断 u8 i; u16 buf[20],res; u8 receiving_flag 0; // 新增一个标志&#xff0c;用于标记是否开始接收数组 void USART1_IRQHandler(void) {if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET) //接收中断{res USART_ReceiveData(USART1);if(receiv…...

【算法基础】选择排序算法 - JAVA

一、算法基础 1.1 什么是选择排序 选择排序是一种简单直观的排序算法&#xff0c;它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后再从剩余未排序元素中继续寻找最小&#xf…...

FastAPI 与数据库交互示例

目录 安装必要的包完整代码示例运行应用使用说明API 端点说明代码解析 下面将创建一个简单的 FastAPI 应用程序&#xff0c;演示如何与 SQLite 数据库进行交互。这个例子包括创建、读取、更新和删除&#xff08;CRUD&#xff09;操作。 安装必要的包 首先&#xff0c;需要安装…...