使用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 …...
别再为OpenFileDialog的STA异常头疼了:一份给C#桌面开发者的线程安全文件操作指南
彻底解决C#文件对话框的STA线程陷阱:从原理到实战的完整方案 在桌面应用开发中,文件选择对话框(OpenFileDialog/SaveFileDialog)是最常用的功能之一,但许多开发者都曾遇到过那个令人头疼的错误提示:"…...
别再死记硬背Flex属性了!用这5个真实网页布局案例,带你彻底搞懂CSS Flexbox
别再死记硬背Flex属性了!用这5个真实网页布局案例,带你彻底搞懂CSS Flexbox 每次看到Flexbox那十几个属性列表就头疼?明明背了justify-content和align-items的区别,实际写代码时还是得反复查文档?不如换个学习方式——…...
Java 深度解析:for 循环 vs Stream.forEach 及性能优化指南
一、基础概念与语法对比1.1 传统 for 循环Java 提供了三种主要的传统循环结构:// 1. 索引 for 循环(最高性能) for (int i 0; i < list.size(); i) {String item list.get(i);System.out.println(item); }// 2. 增强 for 循环࿰…...
RabbitMQ管理界面保姆级排查指南:从队列积压、连接异常到消息确认(Ack/Nack)全解析
RabbitMQ管理界面深度诊断手册:从指标解读到生产级故障排查 RabbitMQ的Web管理界面远不止是一个简单的监控工具——对于运维工程师而言,它是消息中间件健康状态的神经中枢。当深夜收到队列积压告警时,面对15672端口上密密麻麻的数字和图表&am…...
惊艳展示!CYBER-VISION零号协议实时分割效果:盲道、行人、车辆精准识别
惊艳展示!CYBER-VISION零号协议实时分割效果:盲道、行人、车辆精准识别 1. 视觉革命:当AI遇见助盲科技 在熙攘的城市街道上,视障人士的每一次出行都是一场充满未知的挑战。传统的盲杖只能探测到脚边的障碍,而CYBER-V…...
从外卖派单到共享单车:深入拆解Geohash如何成为LBS应用的“网格引擎”
从外卖派单到共享单车:深入拆解Geohash如何成为LBS应用的“网格引擎” 当你在午高峰打开外卖App下单时,系统能在毫秒级完成三个关键动作:确定你的位置、筛选3公里内餐厅、分配最优骑手。这背后是一套将城市空间网格化的精密算法体系——Geoha…...
如何免费实现网盘全速下载:2025年终极直链下载助手完全指南
如何免费实现网盘全速下载:2025年终极直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…...
上海 GEO 优化机构实力解析:十大标杆服务商核心优势深度呈现
随着生成式 AI 全面打通上海用户信息查询、消费下单全决策链条,超过六成上海本地企业都陷入共性增长难题:自身产品与服务实力出众,却在 AI 智能问答里曝光不足、信息偏差,品牌用户心智持续被同城竞品挤压。不少企业入局上海 GEO 赛…...
抖音批量下载神器:3步搞定视频素材库,效率提升500%
抖音批量下载神器:3步搞定视频素材库,效率提升500% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallba…...
Switch游戏传输终极指南:NS-USBLoader跨平台解决方案
Switch游戏传输终极指南:NS-USBLoader跨平台解决方案 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.com/gh_mirror…...
