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

实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包

实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包

「faster-whisper」
链接:https://pan.quark.cn/s/d4ddffb1b196

标题下面提供一个完整的示例,说明如何使用 FastAPI 封装 faster-whisper 接口,对外提供 REST API 服务,并支持一定的并发调用。

在这个示例中,我们将使用 faster-whisper 的 Python 接口(通过 pip 安装 faster-whisper 包),支持从请求参数指定模型名称、设备(如 cpu 或 cuda)、计算精度(如 float16 或 int8)以及 beam_size。为了避免重复加载同一模型,我们使用全局字典作模型实例缓存,并采用线程池(ThreadPoolExecutor)异步处理转录任务,以免阻塞 FastAPI 的事件循环。


1. 环境准备

  1. 安装依赖(建议使用 Python 3.9 及以上版本)

    pip install fastapi uvicorn faster-whisper
    

    对于cuda:

    pip install torch  # 根据硬件环境选择合适的版本
    # torch
    # pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
    
  2. 如果你计划使用 GPU,请确保系统已安装合适版本的 NVIDIA 库(cuBLAS、cuDNN 等),同时根据 faster-whisper 的要求确定对应 CUDA 环境。


2. 项目结构

建议项目结构如下:

faster_whisper_fastapi/
├── models
├── app.py
└── requirements.txt

requirements.txt 示例内容:

fastapi
uvicorn
faster-whisper

3. FastAPI 应用代码

下面给出完整代码示例,代码中对文件上传进行 MIME 类型校验、把上传的音频保存到临时文件,再调用 faster-whisper 进行转录,同时支持请求时指定模型参数、设备以及 beam_size。并通过线程池实现一定的并发调用支持。

import os
import tempfile
import asyncio
from fastapi import FastAPI, UploadFile, File, HTTPException, Query
from fastapi.responses import JSONResponse
from faster_whisper import WhisperModel
from concurrent.futures import ThreadPoolExecutor
from huggingface_hub import snapshot_download  # 新增导入app = FastAPI(title="Faster-Whisper FastAPI 接口")# 模型名称与本地目录的映射字典
MODEL_PATH_MAPPING = {"faster-distil-whisper-large-v2": "./models/faster-distil-whisper-large-v2","faster-distil-whisper-large-v3": "./models/faster-distil-whisper-large-v3","faster-distil-whisper-small.en": "./models/faster-distil-whisper-small.en","faster-distil-whisper-medium.en": "./models/faster-distil-whisper-medium.en","faster-whisper-large-v2": "./models/faster-whisper-large-v2","faster-whisper-large-v1": "./models/faster-whisper-large-v1","faster-whisper-medium.en": "./models/faster-whisper-medium.en","faster-whisper-medium": "./models/faster-whisper-medium","faster-whisper-base.en": "./models/faster-whisper-base.en","faster-whisper-base": "./models/faster-whisper-base","faster-whisper-small.en": "./models/faster-whisper-small.en","faster-whisper-small": "./models/faster-whisper-small","faster-whisper-tiny.en": "./models/faster-whisper-tiny.en","faster-whisper-tiny": "./models/faster-whisper-tiny","faster-whisper-large-v3": "./models/faster-whisper-large-v3",
}# 新增:Hugging Face仓库ID映射
HF_REPO_IDS = {"faster-distil-whisper-large-v2": "Systran/faster-distil-whisper-large-v2","faster-distil-whisper-large-v3": "Systran/faster-distil-whisper-large-v3","faster-distil-whisper-small.en": "Systran/faster-distil-whisper-small.en","faster-distil-whisper-medium.en": "Systran/faster-distil-whisper-medium.en","faster-whisper-large-v2": "Systran/faster-whisper-large-v2","faster-whisper-large-v1": "Systran/faster-whisper-large-v1","faster-whisper-medium.en": "Systran/faster-whisper-medium.en","faster-whisper-medium": "Systran/faster-whisper-medium","faster-whisper-base.en": "Systran/faster-whisper-base.en","faster-whisper-base": "Systran/faster-whisper-base","faster-whisper-small.en": "Systran/faster-whisper-small.en","faster-whisper-small": "Systran/faster-whisper-small","faster-whisper-tiny.en": "Systran/faster-whisper-tiny.en","faster-whisper-tiny": "Systran/faster-whisper-tiny","faster-whisper-large-v3": "Systran/faster-whisper-large-v3",
}# 缓存已加载模型
loaded_models = {}def get_model(model_name: str, device: str = "cpu", compute_type: str = "float16"):"""根据映射关系从本地路径加载模型并缓存,自动下载缺失模型。对于不支持 FP16 的设备,自动降级到 float32 或 int8。参数:- model_name: 模型名称或 Hugging Face 仓库 ID- device: "cpu" 或 "cuda"- compute_type: 计算精度,如 "float16"、"float32" 或 "int8""""# 如果请求 FP16 但设备非 CUDA,自动降级if compute_type == "float16" and device != "cuda":print("[Warning] 当前设备不支持 FP16,已自动降级到 float32。")compute_type = "float32"key = f"{model_name}_{device}_{compute_type}"if key not in loaded_models:model_dir = MODEL_PATH_MAPPING.get(model_name, f"./models/{model_name}")# 自动下载模型if not os.path.exists(model_dir):os.makedirs(model_dir, exist_ok=True)hf_repo_id = HF_REPO_IDS.get(model_name, model_name)print(f"Downloading model {hf_repo_id} to {model_dir}...")try:snapshot_download(repo_id=hf_repo_id,local_dir=model_dir,local_dir_use_symlinks=False,resume_download=True,token=None,)print(f"Model downloaded successfully to {model_dir}")except Exception as e:raise RuntimeError(f"模型下载失败: {e}")if not os.path.isdir(model_dir):raise RuntimeError(f"模型目录 {model_dir} 不存在,请检查路径或下载配置")try:loaded_models[key] = WhisperModel(model_dir,device=device,compute_type=compute_type,local_files_only=True  # 仅使用本地文件)except Exception as e:raise RuntimeError(f"加载模型失败: {e}") from ereturn loaded_models[key]# 线程池用于并发处理任务
executor = ThreadPoolExecutor(max_workers=4)def transcribe_audio(model: WhisperModel, file_path: str, beam_size: int):"""音频转录实现"""try:segments, info = model.transcribe(file_path, beam_size=beam_size)segments = list(segments)transcript = "".join(segment.text for segment in segments)return {"transcript": transcript,"language": info.language,"segments": [{"start": seg.start, "end": seg.end, "text": seg.text}for seg in segments]}except Exception as e:return {"error": str(e)}@app.post("/transcribe")
async def transcribe(file: UploadFile = File(...),model_name: str = Query("faster-whisper-base", description="模型名称或 Hugging Face 仓库 ID"),beam_size: int = Query(5, description="Beam Size"),device: str = Query("cpu", description="运行设备: cpu/cuda"),compute_type: str = Query("float16", description="计算精度: float16/float32/int8")
):# 验证音频格式allowed_types = ["audio/wav", "audio/x-wav", "audio/wave", "audio/x-pn-wav","audio/mpeg", "audio/mp3"]if file.content_type not in allowed_types:raise HTTPException(400, detail="不支持的音频格式")# 保存临时文件try:suffix = "." + file.filename.split('.')[-1]except Exception:suffix = ".wav"with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp:contents = await file.read()tmp.write(contents)tmp_path = tmp.nameloop = asyncio.get_running_loop()try:# 异步加载模型并转录model = await loop.run_in_executor(executor, get_model, model_name, device, compute_type)result = await loop.run_in_executor(executor, transcribe_audio, model, tmp_path, beam_size)except Exception as e:raise HTTPException(500, detail=str(e))finally:os.unlink(tmp_path)if "error" in result:raise HTTPException(500, detail=result["error"])return JSONResponse(content=result)if __name__ == "__main__":import uvicornuvicorn.run("app:app", host="0.0.0.0", port=8000, reload=True)

4. 运行与测试

  1. 本地测试
    在项目目录下运行:

    uvicorn app:app --host 0.0.0.0 --port 8000 --reload
    

    然后访问 http://localhost:8000/docs 进入 FastAPI 自动生成的 API 文档,进行文件上传测试。

  2. 并发支持说明

    • 这里我们通过 ThreadPoolExecutor 将转录任务分发到子线程上,利用多线程来处理阻塞的 CPU 密集型任务,支持一定的并发。
    • 在正式生产环境中,建议考虑使用 GPU 加速模型推理,并根据服务器硬件资源配置合理的线程数或进程数。另外,也可使用 Uvicorn 的多进程启动,例如:
      uvicorn app:app --host 0.0.0.0 --port 8000 --workers 4
      
  3. 接口说明

    • POST /transcribe
      http://localhost:8000/transcribe
    • 参数说明:
      • file: 上传的音频文件(WAV/MP3)
      • model_name: 可选,默认为 “large-v3”,可改为 “turbo”、“distil-large-v3” 等
      • beam_size: 转录时的 beam size,默认为 5
      • device: 使用的设备,“cpu” 或 “cuda”
      • compute_type: 计算精度,通常设为 “float16” 或 “int8”

    上传文件后,接口会将音频保存到临时文件,再通过 faster-whisper 进行转录,最终返回转录文本、检测的语言以及每个片段的起始时间、结束时间和文本内容。

  4. 并发支持说明

    • 使用线程池(ThreadPoolExecutor)将模型加载与转录任务放到后台线程中执行,避免阻塞 FastAPI 的事件循环。
    • 在生产环境中,可考虑使用 Uvicorn 的多进程启动(例如使用 --workers 参数)以获得更高的并发能力。

5. 总结

  • 环境搭建与依赖安装:确保安装 fastapi、uvicorn 和 faster-whisper 及其依赖。
  • 全局模型缓存:利用全局字典缓存不同参数(模型名称、设备、精度)下的模型实例,避免重复加载浪费时间。
  • 异步任务与并发:通过线程池将耗时的模型加载和转录任务放入后台线程中执行。
  • 文件上传处理:使用 FastAPI 的 UploadFile 完成文件上传,并保存到临时文件以供模型处理。
  • 请求参数灵活:支持通过 URL Query 参数设置模型名称、设备、精度以及 beam_size,满足多种使用场景。

相关文章:

实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包

实战指南:封装Faster-Whisper为FastAPI接口并实现高并发处理-附整合包 「faster-whisper」 链接:https://pan.quark.cn/s/d4ddffb1b196 标题下面提供一个完整的示例,说明如何使用 FastAPI 封装 faster-whisper 接口,对外提供 RES…...

011数论——算法备赛

素数筛 给定n, 求2~n内的所有素数 埃氏筛 利用素数的定义, 输出素数2,然后筛掉2的倍数,得 {2,3,5,7,9,11,13,…}输出素数3,然后筛掉3的倍数,得 {2,3,5,7,11,13,…} 继续上述步骤&#xff0…...

C语言之机房机位预约系统

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之机房机位预约系统 目录 博客:机房机位预约系统设计与实现 系统功能概述…...

中间件--ClickHouse-14--案例-3-其他案例思路概述

1、广告投放效果分析 案例背景: 一家广告平台需要分析广告的点击、曝光、转化等数据,以优化广告投放策略并提升 ROI(投资回报率)。 解决方案: 数据接入:将广告投放相关的数据(如曝光、点击、…...

saas是什么?它做什么用的。及和Paas和laas有什么区别

Saas是什么?它做什么用的。及和Paas和laas有什么区别 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是行业内容。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~ 文…...

Qt基础005(文件操作后续)

文章目录 QFileDialogQFileDialog打开开发案例QFileDialog保存开发案例实现文件打开功能开发流程打开功能优化 QComboBoxQListExtraSelection 简介 QFileDialog QFileDialog打开开发案例 #include <QApplication> #include <QFileDialog> #include <QStringLi…...

松灵Cobot Magic双臂具身遥操机器人(基于ROS的定位建图与协同导航技术)

摘要 本文以CobotMagic可移动协作机器人为研究对象&#xff0c;从硬件架构设计、软件系统架构、多传感器融合定位建图系统、智能导航系统协同机制四个维度&#xff0c;深入解析机器人系统工作原理。重点研究多传感器融合定位建图系统实现原理&#xff0c;结合实测数据验证系统…...

AI——神经网络以及TensorFlow使用

文章目录 一、TensorFlow安装二、张量、变量及其操作1、张量Tensor2、变量 三、tf.keras介绍1、使用tf.keras构建我们的模型2、激活函数1、sigmoid/logistics函数2、tanh函数3、RELU函数4、LeakReLu5、SoftMax6、如何选择激活函数 3、参数初始化1、bias偏置初始化2、weight权重…...

实现对象之间的序列化和反序列化

1.什么是序列化&#xff1f; 在项目的开发中&#xff0c;为了让前端更好的分析后端返回的结果&#xff0c;我们一般会将返回的信息进行序列化&#xff0c;序列化就是将返回对象的状态信息转换为一种标准化的格式&#xff0c;方便在网络中传输也方便打印日志时号观察&#xff0…...

QML中日期处理类

在 QML 中处理日期和时间主要使用 JavaScript 的 Date 对象以及 Qt 提供的一些相关功能。以下是常用的日期处理方式&#xff1a; 1. JavaScript Date 对象 QML 可以直接使用 JavaScript 的 Date 对象&#xff1a; qml // 创建当前日期时间 var currentDate new Date()// 创…...

基于docker-java封装的工具类

基于docker-java封装的工具类 背景环境工具类 背景 写OJ系统时需要用docker作为代码沙箱使用&#xff0c;顺手封装了一个工具类&#xff0c;给自己做个笔记&#xff0c;如果可以的话也希望帮助到其他人。 环境 docker 26.1.4docker-java 3.4.2docker-java-transport-httpcli…...

windows docker desktop 无法访问容器端口映射

为什么使用docker desktop访问映射的端口失败&#xff0c;而其端口对应的服务是正常的&#xff1f; 常见问题&#xff0c;容器的防火墙没有关闭&#xff01;&#xff01;&#xff01; 以centos7为例&#xff0c;默认情况下防火墙处于开启状态&#xff1a; 这下访问就OK了...

ReentrantReadWriteLock读写锁

一、锁的分类 这里不会对Java中大部分的分类都聊清楚&#xff0c;主要把 **互斥&#xff0c;共享** 这种分类聊清楚。 Java中的互斥锁&#xff0c;synchronized&#xff0c;ReentrantLock这种都是互斥锁。一个线程持有锁操作时&#xff0c;其他线程都需要等待前面的线程释放锁…...

Vue.js 入门教程

Vue.js 入门教程 Vue.js 是一款非常流行的前端 JavaScript 框架&#xff0c;适用于构建用户界面。它的设计思想是尽可能简单、灵活&#xff0c;易于与其他库或现有项目整合。本文将从最基础的概念开始&#xff0c;逐步引导你学习 Vue.js。 一、Vue.js 基础概念 1.1 什么是 V…...

解决Docker 配置 daemon.json文件后无法生效

vim /etc/docker/daemon.json 在daemon中配置一下dns {"registry-mirrors": ["https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","ht…...

wpf stylet框架 关于View与viewmodel自动关联绑定的问题

1.1 命名规则 Aview 对应 AVIewModel, 文件夹 views 和 viewmodels 1.2 需要注册服务 //RootViewModel是主窗口 public class Bootstrapper : Bootstrapper<RootViewModel>{/// <summary>/// 配置IoC容器。为数据共享创建服务/// </summary…...

车载测试用例开发-如何平衡用例覆盖度和测试效率的方法论

1 摘要 在进行车载测试用例编写时&#xff0c;会遇到多个条件导致用例排列组合爆炸的情况&#xff0c;但是为了产品测试质量&#xff0c;我们又不得不保证用例设计的需求覆盖度&#xff0c;这样又会使得测试周期非常长。我们如何平衡效率和测试质量&#xff1f;本文进行了一些…...

leetcode(01)森林中的兔子

今天开始记录刷题的过程&#xff0c;每天记录自己刷题的题目和自己的解法&#xff0c;欢迎朋友们给出更多更好的解法。 森林中的兔子 森林中有未知数量的兔子&#xff0c;提问其中若干只兔子“还有多少只兔子与你&#xff08;被提问的兔子&#xff09;颜色相同”。将答案收集到…...

人工智能-机器学习其他技术(决策树,异常检测,主成分分析)

决策树 一种对实例进行分类的树形结构&#xff0c;通过多层判断区分目标所属类别 本质&#xff1a;通过多层判断&#xff0c;从训练数据集中归纳出一组分类规则 优点&#xff1a; 计算量校&#xff0c;运算速度快 易于理解 缺点&#xff1a; 忽略属性间的相关性 样本分布不均时…...

AIGC通信架构深度优化指南

AIGC通信架构深度优化指南 标题&#xff1a;《百亿参数大模型如何高效通信&#xff1f;揭秘AIGC系统的协议层设计艺术》 副标题&#xff1a;从分布式训练到多模态推理&#xff0c;构建高可靠AI通信系统 1. AIGC典型通信场景 1.1 分布式模型训练参数同步 sequenceDiagram训练…...

精益数据分析(7/126):打破创业幻想,拥抱数据驱动

精益数据分析&#xff08;7/126&#xff09;&#xff1a;打破创业幻想&#xff0c;拥抱数据驱动 在创业的道路上&#xff0c;我们都怀揣着梦想&#xff0c;但往往容易陷入自我编织的幻想中。我希望通过和大家一起学习《精益数据分析》&#xff0c;能帮助我们更清醒地认识创业过…...

Android Gradle多渠道打包

目录 1.多渠道打包是什么2.为什么需要多渠道打包3.多渠道配置VariantproductFlavorsbuildTypes 3.构建变体组合关于组合 4.渠道过滤5.渠道资源资源文件资源合并规则代码文件SourceSets 6. 渠道依赖项7.渠道统计meta-dataBuildConfig 8.管理渠道 1.多渠道打包是什么 多聚道打包…...

Day58 | 179. 最大数、316. 去除重复字母、334. 递增的三元子序列

179. 最大数 题目链接&#xff1a;179. 最大数 - 力扣&#xff08;LeetCode&#xff09; 题目难度&#xff1a;中等 代码&#xff1a; class Solution {public String largestNumber(int[] nums) {String[] strsnew String[nums.length];for(int i0;i<nums.length;i)str…...

LabVIEW发电机励磁系统远程诊断

变流器在风电系统中承担电能转换与控制的关键角色。它将发电机输出的低频、可变交流&#xff0c;通过整流、逆变等环节转为频率、电压稳定的交流&#xff0c;以满足电网接入要求&#xff1b;同时&#xff0c;根据实时风速调整发电机转速&#xff0c;实现最大功率追踪。 ​ 在某…...

性能比拼: Go vs Bun

本内容是对知名性能评测博主 Anton Putra Go (Golang) vs. Bun: Performance (Latency - Throughput - Saturation - Availability) 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 我对 Bun 在之前的基准测试中的出色表现感到惊讶&#xff0c;因此我决定将它与 Go …...

Kubernetes相关的名词解释Dashboard界面(6)

什么是Kubernetes Dashboard&#xff1f; Kubernetes Dashboard 是一个基于 Web 的用户界面&#xff0c;用于管理 Kubernetes 集群。它是 Kubernetes 官方提供的可视化工具&#xff0c;允许用户通过直观的图形界面而不是命令行来部署、管理和监控集群中的应用程序。 Dashboard…...

Linux网络编程 TCP---并发服务器:多进程架构与端口复用技术实战指南

知识点1【并发服务器—多进程版】 并发服务器&#xff1a;服务器可以同时服务多个客户端 首先复习一下服务器的创建过程&#xff08;如下图&#xff09; 1、监听套接字&#xff08;套接字→绑定→监听&#xff08;连接队列&#xff09;&#xff09; 2、利用accept从连接队列…...

(done) 吴恩达版提示词工程 1. 引言

url: https://www.bilibili.com/video/BV1Z14y1Z7LJ/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 LLM 有两种&#xff1a; 1.基础 LLM&#xff0c;通过文本训练数据预测后面的内容。 这种 LLM 当你给它提问&#xff1a;What is…...

uniapp微信小程序实现sse

微信小程序实现sse 注&#xff1a;因为微信小程序不支持sse请求&#xff0c;因为后台给的是分包的流&#xff0c;所以我们就使用接受流的方式&#xff0c;一直接受&#xff0c;然后把接受的数据拿取使用。这里还是使用uniapp的原生请求。 上代码 //注意&#xff1a;一定要下…...

【TeamFlow】3 Rust 与 WebAssembly (Wasm) 深度应用指南

WebAssembly 是一种低级的类汇编语言&#xff0c;能在现代浏览器中高效执行。Rust 因其无 GC、内存安全和卓越性能&#xff0c;成为编译到 Wasm 的理想语言。 一、为什么选择 Rust Wasm 性能优势&#xff1a;Rust 生成的 Wasm 代码执行效率接近原生 内存安全&#xff1a;避免…...

C 语言的未来:在变革中坚守与前行

C 语言&#xff0c;作为编程语言领域的一位 “老将”&#xff0c;自诞生以来就一直扮演着至关重要的角色。历经数十年的发展&#xff0c;它的影响力依然广泛而深远。在科技飞速发展的今天&#xff0c;新的编程语言如雨后春笋般不断涌现&#xff0c;C 语言的未来发展走向成为了众…...

SQL注入之information_schema表

1 information_schema表介绍&#xff1a; information_schema表是一个MySQL的系统数据库&#xff0c;他里面包含了所有数据库的表名 SQL注入中最常见利用的系统数据库&#xff0c;经常利用系统数据库配合union联合查询来获取数据库相关信息&#xff0c;因为系统数据库中所有信…...

android framework开发的技能要求

作为Android Framework开发工程师,需要具备深入的系统底层理解能力和对Android架构的全面认知。以下是核心技能要求,分为技术能力和软实力两大方向: 一、核心技术能力 Android系统架构深度掌握 Binder机制:理解Binder驱动、ServiceManager、AIDL跨进程通信原理,能分析Bind…...

AWS EC2完全指南:如何快速搭建高性能云服务器?

一、什么是AWS EC2&#xff1f;云时代的虚拟服务器革命 AWS Elastic Compute Cloud&#xff08;EC2&#xff09;作为全球领先的云服务器解决方案&#xff0c;正在重新定义虚拟服务器的可能性。与传统VPS相比&#xff0c;EC2提供&#xff1a; 秒级弹性扩展&#xff1a;CPU/RAM按…...

go环境安装mac

下载go安装包&#xff1a;https://golang.google.cn/dl/ 找到对应自己环境的版本下载。 注意有二进制的包&#xff0c;也有图形界面安装的包。图形界面直接傻瓜式点就行了。 二进制的按照下面操作&#xff1a; 1、下载二进制包。 2、将下载的二进制包解压至 /usr/local目录…...

Python实现对大批量Word文档进行批量自动化排版(15)

前言 本文是该专栏的第15篇,后面会持续分享Python办公自动化干货知识,记得关注。 在本专栏上一篇文章《Python实现对目标Word文档进行自动化排版【4万字精讲】(14)》中,笔者已经详细介绍“基于Python,实现对目标docx格式的word文档进行自动化排版”的实战教学(文章附带…...

嵌入式面试题解析:二维数组,内容与总线,存储格式

在嵌入式系统领域&#xff0c;扎实掌握基础概念是应对面试的关键。本文通过典型面试题&#xff0c;详细解析核心知识&#xff0c;梳理易错点&#xff0c;并补充常见面试题&#xff0c;助力新手快速入门。 一、二维数组元素地址计算 题目 若二维数组 arr[0..M-1][0..N-1] 的首…...

【iOS】alloc init new底层原理

目录 前言 alloc alloc核心操作 cls->instanceSize(extraBytes) calloc obj->initInstanceIsa init 类方法&#xff1a; 实例方法&#xff1a; new 前言 笔者最近在进行对OC语言源码的学习&#xff0c;学习源码的过程中经常会出现一些从来没有遇见过的函数&…...

解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

1、 首先在.vscode下的launch.json中添加"env": {“PYTHONPATH”: “${workspaceRoot}”} {"version": "0.2.0","configurations": [{省略其他配置"env": {"PYTHONPATH": "${workspaceRoot}"}}] }2、 …...

【某比特币网址请求头部sign签名】RSA加密逆向分析

目标&#xff1a;aHR0cDovL21lZ2FiaXQudmlwL21hcmtldA 直接搜索sign不方便定位&#xff0c;可以换个思路搜asi_uuid或者user_info 为什么搜这个&#xff0c;因为都是请求头里面的参数&#xff0c;基本上会在一起 实际上就是Object(h.a)((new Date).getTime()) 直接在这里打断点…...

【Docker项目实战】使用Docker部署Jupyter Notebook服务

【Docker项目实战】使用Docker部署Jupyter Notebook服务 一、 Jupyter Notebook介绍1.1 Jupyter Notebook 简介1.2 主要特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compos…...

Oracle高级语法篇 - 用户与角色关系

在Oracle数据库中&#xff0c;用户和角色是权限管理的核心概念。用户是数据库的使用者&#xff0c;而角色则是权限的集合。通过合理地分配角色给用户&#xff0c;可以简化权限管理&#xff0c;提高数据库的安全性和易用性。本文将详细讲解Oracle中用户和角色之间的关系&#xf…...

“小坝” 策略:始发站 buffer 控制与优化

端到端&#xff0c;这两个端是两个应用程序中的位置&#xff0c;第一个端指数据被产生处&#xff0c;第二个端指数据被消费处。更一般的&#xff0c;把数据发生的应用程序所在的主机视为数据始发站也是合理的。 网络中遍布 buffer&#xff0c;buffer 却是一把双刃剑的存在&…...

【esp32 点亮led】-解决不能闪烁问题

问题现象&#xff1a;将esp例程中的led例程下载到开发板中&#xff0c;led不能闪烁&#xff0c;串口查看&#xff0c;可以看到对应的led ON/led off 信息。 解决办法&#xff1a; 使用idf.py menuconfig 命令配置相应的引脚为GPIO模式&#xff0c;如下图所示&#xff0c;保存…...

自然语言处理(9)—— 共现词矩阵及Python实现

共现词矩阵 1. 概述2. 构建步骤3. 代码实现&#xff08;Python&#xff09;结语 共现词矩阵&#xff08;Co-occurrence Matrix&#xff09;是自然语言处理&#xff08;NLP&#xff09;中用于捕捉词语间语义关系的重要工具。共现矩阵通过统计词语在特定上下文窗口内的共现频率&a…...

缓存 --- Redis的三种高可用模式

缓存 --- Redis的三种高可用模式 主从复制&#xff08;Replication&#xff09;哨兵模式&#xff08;Sentinel&#xff09;集群模式&#xff08;Cluster&#xff09;总结对比选择建议 Redis 的高可用架构模式主要有三种&#xff1a;主从复制&#xff08;Replication&#xff09…...

飞帆中控件数据和 Vue 双向绑定

在 Vue 中&#xff0c;数据的双向绑定是指在视图和数据模型之间自动保持同步。Vue 实现双向绑定的核心特性是其 响应式系统&#xff0c;它能够追踪数据的变化并自动更新视图&#xff0c;反之亦然&#xff0c;视图的变化也可以影响数据。 Vue 提供了几种方式来实现数据双向绑定&…...

【外研在线-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…...

实现AWS Data Pipeline安全地请求企业内部API返回数据

需要编写一段Data Pipeline在AWS云上运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账号&#xff0c;让Data Pip…...

AI书籍大模型微调-基于亮数据获取垂直数据集

大模型的开源&#xff0c;使得每位小伙伴都能获得AI的加持&#xff0c;包括你可以通过AIGC完成工作总结&#xff0c;图片生成等。这种加持是通用性的&#xff0c;并不会对个人的工作带来定制的影响&#xff0c;因此各个行业都出现了垂直领域大模型。 垂直大模型是如何训练出来…...