使用FastAPI进行可视化部署
文章目录
- 一、FastAPI介绍
- 二、环境配置
- 三、示例代码
- 1.app.py代码如下
- 2.websocket_handler.py 代码如下
- 3.运行app
- 4.遇到的问题与解决
一、FastAPI介绍
FastAPI是一个高性能的Python Web框架,它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具有强大功能的Web应用程序。
二、环境配置
依赖库介绍:
Uvicorn 是一个基于 asyncio 开发的轻量级高效的 web 服务器框架。
它的设计初衷是为了实现两个主要目标:
首先,使用 uvloop 和 httptools 实现一个极速的 asyncio 服务器;
其次,实现一个基于 ASGI(异步服务器网关接口)的最小应用程序接口。
Uvicorn 目前支持 HTTP、WebSockets、Pub/Sub 广播,并且可以扩展到其他协议和消息类型。
pip install fastapi uvicorn ollama -i https://pypi.tuna.tsinghua.edu.cn/simple
三、示例代码
示例代码目录结构如下
fastapi_chat_app/
│
├── app.py
├── websocket_handler.py
├── static/
│ └── index.html
-
app.pyFastAPI 应用程序的主要设置和路由。 -
websocket_handler.py处理 WebSocket 连接和消息流。 -
static/index.htmlHTML页面。1.app.py代码如下
from fastapi import FastAPI from fastapi.responses import HTMLResponse from fastapi.staticfiles import StaticFiles from websocket_handler import websocket_endpointapp = FastAPI()app.mount("/static", StaticFiles(directory="static"), name="static")@app.get("/", response_class=HTMLResponse) async def get_form():with open("static/index.html") as f:html_content = f.read()return HTMLResponse(content=html_content)app.websocket("/ws")(websocket_endpoint)if __name__ == "__main__":import uvicornuvicorn.run("app:app", host="127.0.0.0", port=5001, reload=True) # 如果希望远程服务器调用,可以将host更改为"127.0.0.0"2.websocket_handler.py 代码如下
import ollama from fastapi import WebSocketasync def websocket_endpoint(websocket: WebSocket):await websocket.accept() # 接受WebSocket连接user_input = await websocket.receive_text() # 接收用户输入的文本消息stream = ollama.chat( # 使用ollama库与指定模型进行对话model='llama3.1', # 指定使用的模型为llama3.1messages=[{'role': 'user', 'content': user_input}], # 传入用户的输入消息stream=True # 启用流式传输)try:for chunk in stream: # 遍历流式传输的结果model_output = chunk['message']['content'] # 获取模型输出的内容await websocket.send_text(model_output) # 通过WebSocket发送模型输出的内容except Exception as e: # 捕获异常await websocket.send_text(f"Error: {e}") # 通过WebSocket发送错误信息finally:await websocket.close() # 关闭WebSocket连接
3.运行app
- 运行 app.py 文件。
uvicorn app:app --reload
打开页面。

4.遇到的问题与解决
修改app.py 中host 和port 后,通过uvicorn app:app --reload,修改未生效,远程主机无通过 http://<host>:port进行访问。
解决:
uvicorn运行时指定端口号
$ uvicorn app:app --reload --host 0.0.0.0 --port 8000
INFO: Will watch for changes in these directories: ['./fastapi_chat_app']
INFO: Uvicorn running on http://0.0.0.0:8086 (Press CTRL+C to quit)
INFO: Started reloader process [4230] using StatReload
INFO: Started server process [4232]
INFO: Waiting for application startup.
INFO: Application startup complete.相关文章:
使用FastAPI进行可视化部署
文章目录 一、FastAPI介绍二、环境配置三、示例代码1.app.py代码如下2.websocket_handler.py 代码如下3.运行app4.遇到的问题与解决 一、FastAPI介绍 FastAPI是一个高性能的Python Web框架,它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具…...
设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中,对象的创建是一个常见且基础的操作。然而,当项目规模逐渐…...
3、Kubernetes 集群部署 Prometheus 和 Grafana
Kubernetes 集群部署 Prometheus 和 Grafana node-exporter 安装Prometheus 安装和配置Prometheus 配置热加载Grafana 安装部署Grafana 配置 实验环境 控制节点/master01 192.168.110.10 工作节点/node01 192.168.110.20 工作节点/node02 192.168.110.30 node-exporter 安装 #…...
【C语言】第八期——指针
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
如何在 Mac 上安装并配置 JDK 环境变量
如何在Mac上安装并配置JDK环境变量 在开发过程中,许多应用和框架都需要使用Java,尤其是使用Java开发的应用程序。如果你是Mac用户,以下是安装并配置JDK环境变量的步骤,确保你能顺利运行Java程序。 步骤 1:下载JDK 访…...
【git-hub项目:YOLOs-CPP】本地实现05:项目移植
ok,经过前3个博客,我们实现了项目的跑通。 但是,通常情况下,我们的项目都是需要在其他电脑上也跑通,才对。 然而,经过测试,目前出现了2 个bug。 项目一键下载【⬇️⬇️⬇️】: 精…...
LeetCode 热题 100 206. 反转链表
LeetCode 热题 100 | 206. 反转链表 大家好,今天我们来解决一道经典的算法题——反转链表。这道题在 LeetCode 上被标记为简单难度,要求我们将一个单链表反转,并返回反转后的链表。下面我将详细讲解解题思路,并附上 Python 代码实…...
2025年02月21日Github流行趋势
项目名称:source-sdk-2013 项目地址url:https://github.com/ValveSoftware/source-sdk-2013项目语言:C历史star数:7343今日star数:929项目维护者:JoeLudwig, jorgenpt, narendraumate, sortie, alanedwarde…...
WebXR教学 03 项目1 旋转彩色方块
一、项目结构 webgl-cube/ ├── index.html ├── main.js ├── package.json └── vite.config.js二、详细实现步骤 初始化项目 npm init -y npm install three vite --save-devindex.html <!DOCTYPE html> <html lang"en"> <head><…...
深入解析JVM垃圾回收机制
1 引言 本节常见面试题 如何判断对象是否死亡(两种方法)。简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。如何判断一个常量是废弃常量如何判断一个类是无用的类垃圾收…...
【简单】209.长度最小的子数组
题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回0。 示例 1: 输入&am…...
细说 Java 引用(强、软、弱、虚)和 GC 流程(二)
一、前文回顾 在 细说Java 引用(强、软、弱、虚)和 GC 流程(一) 我们对Java 引用有了总体的认识,本文将继续深入分析 Java 引用在 GC 时的一些细节。 还是从我们在前文中提到的引用流程图里说起,这里不清…...
CSS通过webkit-scrollbar设置滚动条样式
查看::-webkit-scrollbar-*各项关系 以下图为例,可以分别定义滚动条背景、滚动轨道、滚动滑块的样式。 需要先给外部容器设置高度,再设置overflow: auto,最后设置三个webkit属性。 <!DOCTYPE html> <html lang"en">…...
Win10配置VSCode的C/C++编译环境
GNU(编译器工具集合)包含了g、gcc和gdb等编译器。MinGW(Minimalist GNU for Windows)是一个适用于Windows操作系统的最小化的GNU工具集,它包括了GCC编译器(包括g)以及其他一些必要的库和工具。M…...
数据结构与算法再探(七)查找-排序
查找 一、二分查找 二分查找是一种高效的查找算法,适用于在已排序的数组或列表中查找特定元素。它通过将搜索范围逐步减半来快速定位目标元素。理解二分查找的“不变量”和选择左开右闭区间的方式是掌握这个算法的关键。 二分查找关键点 不变量 在二分查找中&a…...
【C语言】指针(5)
前言:上篇文章的末尾我们使用了转移表来解决代码冗余的问题,那我们还有没有什么办法解决代码冗余呢?有的这就是接下来要说的回调函数。 往期文章: 指针1 指针2 指针3 指针4 文章目录 一,回调函数二,qsort实现快速排序1…...
大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(2)
Paimon的下载及安装,并且了解了主键表的引擎以及changelog-producer的含义参考: 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join,集成mysql cdc等参考: 大数据组件(四)快速入门实时数据…...
PLC通讯
PPI通讯 是西门子公司专为s7-200系列plc开发的通讯协议。内置于s7-200 CPU中。PPI协议物理上基于RS-485口,通过屏蔽双绞线就可以实现PPI通讯。PPI协议是一种主-从协议。主站设备发送要求到从站设备,从站设备响应,从站不能主动发出信息。主站…...
前端js进阶,ES6语法,包详细
进阶ES6 作用域的概念加深对js理解 let、const申明的变量,在花括号中会生成块作用域,而var就不会生成块作用域 作用域链本质上就是底层的变量查找机制 作用域链查找的规则是:优先查找当前作用域先把的变量,再依次逐级找父级作用域直到全局…...
Scrum方法论指导下的Deepseek R1医疗AI部署开发
一、引言 1.1 研究背景与意义 在当今数智化时代,软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论,以其迭代式开发、快速反馈和高效协作的特点,在软件开发领域占据了重要地位。自 20 世纪 90 …...
Captain AI系统核心优势及功能支撑,对比凸显价值
在OZON跨境电商运营过程中,运营工具的选择直接影响运营效率、决策质量与成本控制。传统运营工具多存在功能单一、操作繁琐、适配性不足等问题,难以满足商家全流程运营需求。而Captain AI系统凭借其全链路整合、智能化赋能、场景化适配的独特优势…...
当PM凌晨提需求时,我的自动化回复机器人亮了:一名测试工程师的“静默”反击与效能革命
深夜,手机屏幕的冷光骤然亮起,一条来自产品经理(PM)的即时消息弹窗,像一枚投入平静湖面的石子,精准地击碎了凌晨两点钟的睡眠。消息简洁,甚至带着一丝不容置疑的“理所应当”:“紧急…...
避坑指南:辰华CHI软件宏命令(Macro Command)编写与调试的5个常见错误
辰华CHI宏命令实战避坑手册:5个高频错误解析与调试技巧 在电化学测试领域,辰华CHI软件的宏命令功能一直是科研人员的得力助手,但就像任何强大的工具一样,它也可能成为效率黑洞——当你在凌晨三点的实验室里,面对满屏红…...
Liunx创建挂载步骤
1. 查看磁盘情况lsblk # 查看所有块设备 fdisk -l # 查看磁盘分区详情(需 root)2. 分区(以 /dev/sdb 为例)fdisk /dev/sdb进入交互界面后:n → 新建分区p → 主分区(或 e 扩展分区)回车接受默认…...
Bidili Generator图片生成工具:5分钟快速部署,小白也能玩转SDXL定制化AI绘画
Bidili Generator图片生成工具:5分钟快速部署,小白也能玩转SDXL定制化AI绘画 1. 引言:让AI绘画变得简单 你是否曾经羡慕那些能够用AI生成精美图片的技术达人?现在,这一切变得前所未有的简单。Bidili Generator是一款…...
别再买错芯片了!全志A40i平台USB-WiFi选型与RTL8188FU/FTV驱动移植避坑指南
全志A40i平台USB-WiFi选型与驱动移植实战指南 在嵌入式设备开发中,Wi-Fi模块选型往往是最容易被低估的环节。许多工程师习惯性地认为"只要芯片型号对得上就能用",直到项目进度被卡在驱动兼容性问题上才追悔莫及。全志A40i平台作为工业级SoC的典…...
从零到一:基于Spring Cloud Alibaba + Nacos + Sentinel的电商秒杀系统实战
从零到一:基于Spring Cloud Alibaba Nacos Sentinel的电商秒杀系统实战 秒杀场景一直是电商系统中最具挑战性的业务场景之一。想象一下,当某款热门商品以极低价格限量发售时,瞬间涌入的流量可能达到平时系统的数十倍甚至上百倍。这种突发的…...
用OpenCV和Python搞定红绿灯识别:从视频处理到轮廓检测的完整实战
基于OpenCV的智能红绿灯识别系统实战:从视频处理到实时检测 红绿灯识别是计算机视觉在智能交通领域的基础应用之一。想象一下,你正坐在电脑前,手头有一段行车记录仪拍摄的城市道路视频,如何让计算机自动识别视频中的红绿灯状态&am…...
保姆级教程:给通达信MPV版7.52加个“外挂”菜单,一键调用扫雷宝和复盘工具
通达信高阶定制指南:打造专属金融分析工作台 在金融投资领域,效率就是生命线。当大多数投资者还在多个软件间频繁切换时,你已经可以通过简单的配置文件修改,将通达信变成集行情分析、风险扫描、数据复盘于一体的超级终端。这不是简…...
OneNote到Markdown终极转换指南:5步轻松迁移你的珍贵笔记
OneNote到Markdown终极转换指南:5步轻松迁移你的珍贵笔记 【免费下载链接】onenote-md-exporter ConsoleApp to export OneNote notebooks to Markdown formats 项目地址: https://gitcode.com/gh_mirrors/on/onenote-md-exporter OneNote Md Exporter是一款…...
