- 博客(68)
- 收藏
- 关注
原创 Python 并发编程实战:多线程、协程与多进程全解析
fill:#333;important;important;fill:none;Python 并发GIL引用计数保护I/O 和 C 扩展时释放3.13 无 GIL 实验threadingThread 生命周期Semaphore 限流Event 信号Condition 条件等待threading.local 线程隔离queue.Queue 线程安全队列asyncioEvent Loop超时控制Semaphore 并发限制Queue / Pipe 通信。
2026-06-02 20:31:58
199
原创 Python 魔术方法完全指南:写出“有灵魂“的类
fill:#333;important;important;fill:none;魔术方法生命周期new创建实例init初始化del析构字符串表示repr开发者str用户format格式化比较eq==lthash可哈希算术正向add反向radd原地iadd容器len长度getitem索引iter迭代containsin属性getattr缺失时setattr设置时资源管理enter进入 withexit退出 with其他call可调用bool真假判断分类核心方法关键原则生命周期。
2026-05-27 10:42:15
385
原创 FastAPI 系列 ·(十二):生产部署——Docker + 配置管理(系列完结)
知识点FastAPI 方案Spring Boot 对应配置管理多环境配置容器化多阶段 Dockerfile多服务编排反向代理Nginx进程管理健康检查密钥管理环境变量 + .gitignore🎯金句:代码写得再好,部署做不好,也只是本地的艺术品。Docker + 配置管理,是代码从开发机走向生产的最后一公里。
2026-05-27 09:49:37
430
原创 FastAPI 系列 ·(十一):ClickHouse 集成——大数据查询实战
知识点ClickHouse 方案MySQL 对比存储引擎MergeTree(列存)InnoDB(行存)Python 驱动asynch(异步 TCP)aiomysql分析查询聚合函数 + 窗口函数(windowFunnel)标准 SQL,大数据量慢预聚合物化视图(AggregatingMergeTree)需要手动维护汇总表写入策略批量写入(1000+ 条/批)支持实时单行写入去重UNIQUE KEY时区建表时指定连接时设置time_zone数据同步。
2026-05-27 09:48:42
494
原创 FastAPI 系列 · (十):测试——从单元到集成
知识点FastAPI 方案Spring Boot 对应测试框架JUnit5HTTP 接口测试依赖替换@MockBean测试 DB事务隔离fixture(测试回滚)覆盖率pytest-covJacocoCI 流水线Celery 测试测试数据🎯金句:测试不是为了证明代码正确,而是为了在代码出错时第一时间发现。dependency_overrides 是 FastAPI 测试的灵魂——用它把"真实世界"换成"可控环境",从此测试不再依赖外部服务。
2026-05-26 21:11:58
376
原创 FastAPI 系列 ·(九):中间件与错误处理:让服务更健壮
错误处理的最佳实践是将框架级异常)和业务级异常(商品不存在、库存不足)分开管理。业务异常有自己的错误码体系,由专门的处理器转换为统一格式响应。是 Starlette(FastAPI 的底层框架)提供的中间件基类。继承它并重写dispatch方法,即可在请求到达路由前和响应返回后插入自定义逻辑。请求进入 → dispatch(request, call_next) 前半段↓call_next(request) ← 调用下一层(路由或下一个中间件)↓。
2026-05-26 17:12:05
477
原创 FastAPI 系列 ·(八):后台任务:从 BackgroundTasks 到 Celery
Celery是 Python 生态中最成熟的分布式任务队列框架,诞生于 2009 年,被 Instagram、Mozilla 等公司大规模使用。Broker(消息代理):任务队列的核心,接收 Web 应用发布的任务消息并暂存,等待 Worker 消费。本文使用 Redis 作为 Broker,类比 Spring 生态中的 RabbitMQ 或 Kafka。Worker(工作进程):实际执行任务的独立进程,从 Broker 拉取任务并运行。
2026-05-26 15:37:58
405
原创 LangChain 系列 ·(九):LangGraph——当 Agent 需要“记住状态“
概念核心要点State工作流的共享数据,用 TypedDict 定义;表示追加语义Node接收 State,返回需要更新的字段;不能直接修改传入的 state 对象条件边根据路由函数的返回值决定下一个节点,返回值必须在 mapping 中每步自动保存状态;thread_id是会话标识符;开发用 MemorySaver,生产用 SqliteSaver 或 PostgreSQL在指定节点暂停;从断点继续ToolNodeLangGraph 内置的工具执行节点,自动处理工具调用和 ToolMessage 的构造。
2026-05-25 19:17:54
397
原创 FastAPI 系列·(七):Redis 集成——缓存、分布式锁与 Session 管理
(旁路缓存)是分布式系统中最经典、最安全的缓存使用模式。缓存永远是数据库的快照,应用代码负责维护两者的一致性。与之对比的是 Read Through / Write Through 模式——那些模式把缓存更新的职责委托给缓存层本身(如 ORM 插件、缓存代理),对应用透明。Cache Aside 则更直白:应用自己决定何时读缓存、何时写缓存、何时删缓存。本篇为shop-api知识点FastAPI 实现Spring 对应Redis 连接池初始化lifespan@BeanRedis 依赖注入。
2026-05-25 15:58:45
465
原创 FastAPI 系列 ·(六):异步编程——从 Event Loop 原理到并发查询实战
在动手写并发代码之前,必须先搞清楚 Python 异步的底层机制。很多工程师从 Java 多线程背景切换过来,往往把 Python 协程类比成"轻量级线程"——这个类比在某些场景有用,但在关键细节上会误导判断。Event Loop(事件循环) 是整个异步系统的调度中心。它本质上是一个无限循环,不断从就绪队列中取出可以执行的任务来运行。在 FastAPI + uvicorn 的运行时里,整个应用只有一个 Event Loop,所有协程都在这一个循环里被调度。Coroutine(协程) 是用 定义的函数。调用
2026-05-25 14:41:38
400
原创 FastAPI 系列 ·(五):JWT + OAuth2 认证——从 Token 颁发到权限控制
FastAPI(Python)等价写法):...两者都是声明式权限控制,核心差异在于:Spring Security 依赖 AOP + 方法拦截器在运行时织入逻辑;FastAPI 的Depends()是在请求处理前,作为依赖图的一部分同步执行的。知识点FastAPI 实现Spring Security 对标密码哈希获取登录凭据JWT 生成JWT 校验Token 提取当前用户注入方法级权限路由组权限🎯本篇金句:认证不是"拦截请求",而是"解析身份"。
2026-05-22 11:01:38
402
原创 FastAPI 系列 ·(四):数据库集成——SQLAlchemy 2.0 异步 ORM 与 Alembic 迁移
本篇完整打通 `shop-api` 的数据库层——从 SQLAlchemy 2.0 异步引擎、ORM Model 定义、CRUD Repository,到 Alembic Schema 迁移,建立与 Spring Data JPA + Flyway 的完整认知映射。
2026-05-21 14:41:30
525
原创 FastAPI 系列·(三):依赖注入——用 Depends 构建分层架构
依赖注入的本质不是"框架帮你创建对象",而是"代码声明我需要什么,框架保证你能拿到"——FastAPI 的 `Depends()` 将这种契约精神贯彻到了每一次 HTTP 请求。
2026-05-20 09:35:34
217
原创 FastAPI 系列 ·(二):路由与请求模型——用 Pydantic 重新定义接口契约
FastAPI 的路由系统以 Python 类型注解为核心,配合 Pydantic v2 的 Schema 声明,实现了比 Spring MVC 注解体系更简洁却同样严谨的接口契约机制;本篇为 `shop-api` 搭建完整的商品 CRUD 路由骨架
2026-05-19 09:58:21
459
原创 FastAPI 系列(一)· 初体验——从 Spring Boot 工程师视角认识 FastAPI
FastAPI 是 Python 后端生态中兼顾高性能与开发效率的现代框架,本篇带你从零搭建 `shop-api` 骨架,建立与 Spring Boot 的全景映射认知。
2026-05-18 16:37:53
3183
1
原创 LangChain 系列·(十一):从 Demo 到上线——生产部署实战
环节关键实现核心价值异步接口ainvokeastream不阻塞事件循环,支持高并发流式输出+ SSE用户实时看到生成过程重试透明处理瞬时 API 错误降级.with_fallbacks([备用模型])主模型故障时自动切换超时保护防止慢请求拖垮服务并发控制进程内 Semaphore + Redis 分布式限流避免触发 API Rate Limit缓存RedisCache相同问题不重复调用 LLM,降成本速率限制Redis 滑动窗口防单用户滥用,保护 API 配额会话管理Redis 持久化。
2026-05-14 10:32:54
235
原创 LangChain 系列·(十):LangSmith——调试和监控你的 LLM 应用
介绍 LangSmith 的链路追踪、评估数据集管理与实验对比功能,从"靠日志猜问题"升级为"用数据找问题"
2026-05-13 11:35:48
270
原创 LangChain 系列·(八):Agent——让 AI 自己做决策
本文介绍 ReAct 模式的推理原理,以及 LangChain 的 AgentExecutor 如何将工具调用循环封装为可复用的 Agent
2026-05-11 14:01:28
434
原创 LangChain 系列·(七):Tools——给大模型加上手脚
本文从"LLM 的能力边界"切入,介绍 Tool 的本质与定义方式,深入 Tool Calling 的底层机制,并处理结构化输入与错误场景
2026-05-08 09:53:14
431
原创 LangChain 系列·(六):RAG 评估——你怎么知道它够好?
介绍RAGAS 评估框架的核心指标与使用方法,以及如何构建评估数据集、A/B 对比不同 RAG 策略的效果
2026-05-06 16:40:11
526
原创 LangChain 系列·(五):RAG 进阶——让检索真的准
"""将 LLM 输出的多行文本解析为问题列表""""system","你是一个检索优化专家,负责将用户问题改写为多个角度的查询语句,""以便在文档库中检索到更全面的相关内容。),"human","原始问题:{question}\n\n""请从以下角度各生成一个等价问题(每行一个,共 3 个):\n""1. 更正式/技术化的表述\n""2. 更口语化/简化的表述\n""3. 从解决方案角度的反向表述"),])💡适用场景。
2026-04-30 13:43:43
485
原创 LangChain 系列·(四):RAG 基础——给大模型装上“外脑“
组件核心作用关键参数/选择将原始文件转为 Document 对象按文件格式选择对应 Loader将长文档切分为可检索的 chunkchunk_size(51220%)将文本映射为高维向量中文场景选 BGE 或 text-embedding-3-large存储向量并支持相似度检索开发用 FAISS/Chroma,生产用 Milvus/QdrantRetriever执行相似度搜索k=3~5,质量差时优先调整 chunk 策略RAG Prompt约束模型基于上下文回答。
2026-04-27 20:50:51
419
原创 Langchain 系列 · (三):Prompt 工程——把提示词写成代码
技巧适用场景核心价值角色设定所有场景激活模型的领域知识,划定行为边界任务分解多步推理、复杂分析降低跳步和遗漏的概率输出格式约束需要解析输出的场景使输出结构可预测,便于下游处理思维链(CoT)逻辑推理、数学计算显著提升复杂任务准确率负向约束需要限制模型行为的场景防止模型"自作聪明",减少意外输出Few-shot 示例输出风格难以描述时直接示范比文字描述更有效🎯 提示词工程的本质是减少歧义——让模型对"该做什么、怎么做、输出什么格式"的理解与你的预期完全一致。
2026-04-27 10:38:54
381
原创 LangChain 系列 ·(二): LCEL——AI处理的Pipeline
当需要将一个普通 Python 函数嵌入 LCEL 管道时,使用 RunnableLambda# 自定义预处理函数:将输入文本转为大写并截断return {"text": input["text"].strip()[:500], # 截断过长输入"language": input.get("language", "英文")("system", "你是专业翻译,请将文本翻译成{language}。"),])# 将自定义函数嵌入管道。
2026-04-24 15:11:55
432
原创 LangChain 系列 · (一):为什么不直接调用API
概念类比核心作用对话角色统一消息格式,屏蔽不同模型的接口差异ChatOpenAI模型插槽统一调用接口,一行代码切换模型提供商可复用模板结构化提示词,支持动态变量注入输出适配器将 AIMessage 转为所需数据类型LCEL 管道流水线将各组件串联为完整的处理链🎯 LangChain 的核心价值不在于"能做什么",而在于"如何让 LLM 应用的各个部分可组合、可替换、可测试"。掌握这套抽象体系,是构建生产级 LLM 应用的基础。
2026-04-24 14:01:02
409
原创 Flink 实时计算引擎深度解析
在实时数据处理需求爆发式增长的今天,Apache Flink 已成为流计算领域的事实标准。无论是双 11 的实时交易大屏、金融风控系统的毫秒级响应,还是实时数仓的秒级数据新鲜度,背后都离不开 Flink 的身影。与传统批处理引擎不同,Flink 从设计之初就以流处理为核心理念——它认为"批是流的特例"。这一颠覆性的思路使得 Flink 能够同时高效处理实时流数据和离线批数据,真正实现了流批一体的架构愿景。
2026-04-09 14:25:53
629
原创 python:常用的基础工具包
Python 生态的强大之处在于其丰富的第三方库。本文精选 **10+ 类通用基础工具包**,涵盖 HTTP 请求、数据模型、配置管理、日志、命令行、异步并发等核心场景。每个工具都配有**完整代码示例**,即学即用!
2026-03-17 17:41:05
466
原创 Hive 深度解析:从原理到实践
本文全面解析了Apache Hive在大数据生态中的核心地位与应用。Hive作为Hadoop生态的数据仓库基础设施,提供数据表抽象、SQL查询引擎和元数据管理三大核心能力。文章详细介绍了Hive的发展历程、版本特性演进,以及包含CLI、Beeline、HiveServer2、Metastore等在内的核心架构组件。同时阐述了Hive在Hadoop生态系统中的定位,与其他组件如HDFS的关系。Hive通过将SQL转化为MapReduce/Tez/Spark任务,实现了对海量数据的SQL化处理,是大数据时代企业
2026-03-13 11:43:50
665
原创 Ray 框架入门指南:用 Python 轻松实现分布式计算
Ray是一个开源的分布式计算框架,由 UC Berkeley RISELab 开发,最初用于强化学习,现已扩展为通用的分布式计算平台。核心理念:用最少的代码改动,让单机 Python 程序无缝扩展到分布式集群。# 单机版本# Ray 分布式版本(只需加两个装饰器)import rayray.init()入门简单:添加装饰器即可功能强大:Task、Actor、Object Store 满足各种需求生态完善:Tune、Train、Serve 覆盖 ML 全流程生产就绪:完善的监控、调度、容错机制。
2026-03-12 17:06:22
355
原创 我用Mybatis的方式封装了OLAP查询!
*** OlapMapper注解* * - 用在整个Dao文件上表示所有的方法均走缓存* * - 用在某个具体方法上面修改该方法的缓存配置*/@Component。
2024-05-22 17:35:51
1023
原创 Spark 浅谈Spark中的各种join
众所周知,Join的种类丰富:按照**关联形式(**Join type)划分:有内关联,外关联,左关联,右关联,半关联,逆关联等,由业务逻辑决定的关联形式决定了Spark任务的运行结果;按照关联机制(Join Mechanisms)划分:有NLJ(Nested Loop Join) , SMJ(Sort Merge Join)和HJ(Hash Join),由数据内容决定的实现机制,则决定了Spark任务的运行效率;关联形式Spark支持的关联形式:关联形式Join Type关键字
2022-02-16 16:19:49
3972
原创 Spark : 多线程提交优化多Job任务
介绍在日常业务中,spark常见的就是通过路径通配符*,{}等方式一次读取多个文件,一次批处理将这些文件做一个大job写入Hive或者ODPS,笔者最近在用Spark读取Hudi的文件时候发现了一个诡异的文件丢失Bug:一次读入所有文件夹会有部分文件夹丢失,一开始怀疑是这部分文件夹本身有损坏,但是用spark单独读取该文件夹的时候发现数据又不会丢失.既然一次job会丢数据,那么不妨按文件夹拆分job,每个job执行单个任务,常见就是for循环去遍历所有文件夹挨个执行,但是效率过低需要六个小时,在资源
2021-11-19 13:57:37
2203
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅