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

【Python笔记-FastAPI】后台任务+WebSocket监控进度

目录

一、代码示例

二、执行说明

(一) 调用任务执行接口

(二) 监控任务进度


实现功能:

  1. 注册后台任务(如:邮件发送、文件处理等异步场景,不影响接口返回)
  2. 监控后台任务执行进度(进度条功能)
  3. 支持根据任务ID查询对应任务进度

一、代码示例

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import random
import asynciofrom typing import List, Dict
from fastapi import FastAPI, BackgroundTasks, WebSocketapp = FastAPI()# 用于存储连接的 WebSocket 实例
connected_websockets: Dict[int, List[WebSocket]] = {}@app.websocket("/ws/{task_id}/")
async def websocket_endpoint(websocket: WebSocket, task_id: int):"""WebSocket路由,用于接收任务进度"""await websocket.accept()connected_websockets.setdefault(task_id, []).append(websocket)try:while True:await websocket.receive_text()except:connected_websockets[task_id].remove(websocket)@app.post("/task/{task_id}/")
async def start_task(background_tasks: BackgroundTasks, task_id: int):"""注册后台任务"""background_tasks.add_task(process_task, task_id=task_id)return {"task_id": task_id}async def process_task(task_id):"""处理任务的后台任务"""progress = 0while progress < 100:await asyncio.sleep(1)progress += random.randint(1, 10)progress = min(progress, 100)for ws in connected_websockets[task_id]:await ws.send_json({"task_id": task_id, "progress": progress})await asyncio.sleep(1)# 启动应用
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

二、执行说明

(一) 调用任务执行接口

  1. 启动服务后,访问:http://127.0.0.1:8000/docs
  2. POST请求:http://127.0.0.1:8000/task/1/,指定任务ID为1

(二) 监控任务进度

  1. 安装websocket请求工具:npm install -g wscat
  2. 终端输入wscat -c ws://127.0.0.1:8000/ws/1/,监控任务ID为1的执行进度

相关文章:

【Python笔记-FastAPI】后台任务+WebSocket监控进度

目录 一、代码示例 二、执行说明 (一) 调用任务执行接口 (二) 监控任务进度 实现功能&#xff1a; 注册后台任务&#xff08;如&#xff1a;邮件发送、文件处理等异步场景&#xff0c;不影响接口返回&#xff09;监控后台任务执行进度&#xff08;进度条功能&#xff09;支…...

力扣hot100:15.三数之和(双指针/哈希表)

分析&#xff1a; 三数和问题&#xff0c;这里和两数之和不一样&#xff0c;返回的是值&#xff0c;因此可以对其进行排序&#xff0c;使用双指针。 一、一层循环双指针 class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {sort…...

VMware虚拟机使用Windows共享的文件夹

虚拟机版本为 VMware Workstation 16 Pro:16.2.4&#xff1b;主机位Windows11&#xff1b;记录于2024-03-05   在个人使用时&#xff0c;经常会有一些数据集等大文件重复在不同实验中使用&#xff0c;但是不同系统中来回使用会导致占用虚拟机空间&#xff0c;该博文通过将主机…...

利用Python自动化日常任务

在快节奏的现代生活中&#xff0c;时间就是一切。幸运的是&#xff0c;Python提供了一系列强大的库和工具&#xff0c;可以帮助我们自动化那些乏味且重复的任务&#xff0c;从而释放我们的时间&#xff0c;让我们可以专注于更有创造性和有意义的工作。下面&#xff0c;我们将探…...

Android的多线程和异步处理

在Android开发中&#xff0c;多线程和异步处理是处理耗时操作、提高应用响应性和性能的关键技术。以下是一些关于Android多线程和异步处理的基本概念和实践&#xff1a; 1. **主线程&#xff08;UI线程&#xff09;**&#xff1a; - Android应用的主线程负责处理UI操作和事…...

MySQL-----视图

一 视图 ▶ 介绍 视图view是一个虚拟表&#xff0c;非真实存在&#xff0c;其本质是根据SQL语句获取动态的数据集&#xff0c;并为其命名&#xff0c;用户使用时只需使用视图名称即可获取结果集&#xff0c;并可以将其当作表来使用。 数据库中存放了视图的定义&…...

LeetCode-02

225. 用队列实现栈 用两个队列实现栈的功能&#xff0c;思路如下&#xff1a; 往空队列中放新元素把非空队列中的元素依次放入刚才添加了新元素的队列&#xff0c;直到非空队列变为空队列 class MyStack(object):def __init__(self):self.queue1 []self.queue2 []def push(…...

瑞_Redis_Redis的Java客户端

文章目录 1 Redis的Java客户端1.1 Jedis快速入门1.1.1 入门案例1.1.1.1 项目构建1.1.1.2 引入依赖1.1.1.3 建立连接1.1.1.4 释放资源1.1.1.5 测试1.1.1.6 完整测试类代码 1.1.2 Jedis连接池1.1.2.1 连接池工具类1.1.2.2 改造原始代码 1.2 SpringDataRedis1.2.1 RedisTemplate1.…...

Cmake的使用

第一步&#xff1a;安装Cmake 双击点开即可&#xff0c;无脑下一步。 第二步&#xff1a;编写一个简单的Cmake项目 CMakeLists.txt文件 # 设置最低的 CMake 版本要求 cmake_minimum_required(VERSION 3.10)# 设置项目名称 project(MyProject)# 添加可执行文件 add_executabl…...

linux系统ELK组件介绍

ELK组件介绍 ELK组件介绍Elasticsearch&#xff1a;Logstash:Kibana:Kafka&#xff1a; Filebeat: ELK 官网地址&#xff1a;https://www.elastic.co 官网搭建&#xff1a;https://www.elastic.co/guide/index.html 组件介绍 Elasticsearch&#xff1a; 是一个基于Lucene的搜…...

回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测

回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测 目录 回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BiTCN基于双向时间卷积网络的数据回归预测&#xff08;完整源码和数据&a…...

Tailscale中继服务derper使用docker-compose部署

docker启动 docker run --restart always \--name derper -p 12345:12345 -p 3478:3478/udp \-v /root/.acme.sh/xxxx/:/app/certs \-e DERP_CERT_MODEmanual \-e DERP_ADDR12345 \-e DERP_DOMAINxxxx \-d ghcr.io/yangchuansheng/derper:latestdocker-compose启动 version: …...

Spring Cloud 实战系列之 Zuul 微服务网关搭建及配置

一、创建SpringBoot项目 用mavan搭建也可以。&#xff08;重要的是后面pom里应该引入那些依赖&#xff0c;application.yml怎么配置&#xff09; 由于开始构建项目时选择了Eureka Server&#xff0c;所以pom.xml中不需要手动添加依赖了 首先在启动类SpringcloudApplicatio…...

【数据结构】队列

前言&#xff1a; 本节博客是对基础数据结构队列的一种实现思路的分享&#xff0c;有需要借鉴即可。 1.队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先 进先出FIFO(First In First Out) 入…...

学习JAVA的第十三天(基础)

目录 API之Arrays 将数组变成字符串 二分查找法查找元素 拷贝数组 填充数组 排序数组 Lambda表达式 集合的进阶 单列集合 体系结构 Collection API之Arrays 操作数组的工具类 将数组变成字符串 //将数组变成字符串char[] arr {a,b,c,d,e};System.out.println(Arra…...

C++--机器人的运动范围

目录 1. 题目 2. 思路 3. C代码测试 4. 测试结果 1. 题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#xff0c;下四个方向移动一格&#xff0c;但是不能进入行坐标和列坐标的数位之和大于k的格…...

深度学习API——keras初学

keras定义相关概念&#xff1a; Keras是一个深度学习API&#xff0c;使用Python语言编写的github开源项目&#xff0c;主要开发者为谷歌工程师。Keras底层可调用不同的机器学习平台&#xff0c;如TensorFlow、Theano或micsoft-CNTK。 作用&#xff1a;keras主要功能是简化机器…...

Web APIs知识点讲解(阶段二)

DOM-事件基础 一.事件 1.事件 目标&#xff1a;能够给 DOM元素添加事件监听 事件:事件是在编程时系统内发生的动作或者发生的事情&#xff0c;比如用户在网页上单击一个按钮 事件监听:就是让程序检测是否有事件产生&#xff0c;一旦有事件触发&#xff0c;就立即调用一个函…...

多平台拼音输入法软件的开发

拼音输入法从上个世纪发展到现在, 已经发展了几十年了, 技术上已经非常成熟了. 换句话说, 就是实际上没多少技术含量, 随便来个人就能手搓一个. 本文介绍一个简单的多平台拼音输入法软件的设计和实现, 支持 GNU/Linux (ibus) 平台 (PC) 和 Android 平台 (手机). 目录 1 中文输…...

Flutter学习7 - Dart 泛型

1、泛型类 //泛型类 class Cache<T> {final Map<String, T> _cache {};void saveData(String key, T value) {_cache[key] value;}//泛型方法T? getData(String key) {return _cache[key];} }void main() {Cache<int> cache1 Cache();const String name…...

揭秘AI教材编写秘诀!低查重AI写教材工具,让教材写作高效又轻松!

许多教材编写人员常常感到遗憾 许多教材编写人员常常感到遗憾&#xff0c;虽然他们的正文内容经过精心打磨&#xff0c;但由于缺乏必要的辅助资源&#xff0c;导致整体教学效果受到影响。比如&#xff0c;设计具有层次感的课后练习题时&#xff0c;常常缺乏新颖的思路&#xf…...

Unity AssetBundle全生命周期管理实战:打包、上传、加载与卸载闭环指南

1. 这不是“打包完就完事”的流程&#xff0c;而是一条必须闭环的资源生命线在Unity项目做到中后期&#xff0c;你大概率会遇到这几个扎心时刻&#xff1a;打包后安装包体积突然暴涨300MB&#xff0c;美术说“就加了5张贴图”&#xff0c;程序查了一天发现是某张HDR天空盒被错误…...

集团总部失控(二):谁制造了“诸侯”?

集团管控失灵&#xff0c;常见的归因是子公司“不听话”“各自为政”“挑战规则”。这些现象确实存在&#xff0c;但若深究其根源&#xff0c;往往会发现&#xff1a;子公司的问题只是表层&#xff0c;更深层的原因埋藏在总部自身的治理逻辑与管理方式中。 一、历史形成的权威…...

显卡驱动清理终极指南:为什么你的系统需要Display Driver Uninstaller深度清理?

显卡驱动清理终极指南&#xff1a;为什么你的系统需要Display Driver Uninstaller深度清理&#xff1f; 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirr…...

3分钟学会使用elan:告别Lean版本混乱的智能版本管理器

3分钟学会使用elan&#xff1a;告别Lean版本混乱的智能版本管理器 【免费下载链接】elan The Lean version manager 项目地址: https://gitcode.com/gh_mirrors/el/elan 还在为不同Lean项目需要不同版本而头疼吗&#xff1f;elan作为Lean定理证明器的智能版本管理器&…...

基于知识图谱InsightGraph — 让数据开口说话。

从Palantir的ontology思路出发&#xff0c;我们踩了一遍知识图谱的坑让数据从"分散的资产"&#xff0c;变成"会分析、会归因的业务伙伴"&#x1f4bc;你一定遇到过这些问题这份数据和其他系统能不能关联&#xff1f;问了三个人有三个答案运营问"为什么…...

ARMv8/v9架构TRCIDR寄存器详解与调试实践

1. AArch64 TRCIDR寄存器概述在ARMv8/v9架构的调试系统中&#xff0c;TRCIDR&#xff08;Trace ID Registers&#xff09;系列寄存器扮演着关键角色。这些64位系统寄存器专门用于向软件报告处理器的跟踪单元功能特性&#xff0c;是调试基础设施的重要组成部分。当处理器实现了F…...

如何快速掌握DLSS Swapper:游戏性能优化终极指南

如何快速掌握DLSS Swapper&#xff1a;游戏性能优化终极指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾经因为游戏中的DLSS版本过时而无法享受最新的性能提升&#xff1f;或者新版本DLSS导致游戏闪退让你…...

【tomcat部署前台war包报错】

tomcat部署前台war包报错 背景&#xff1a;tomcat启动前台war包&#xff0c;由zip直接改文件后缀成war包&#xff0c;jdk8 同事好使&#xff0c;我不好使 部署平台日志&#xff1a; 报错一、正常tomcat执行时会把war包解压成对应文件夹&#xff0c;这里应该是没解压成功。没有具…...

十三张扑克APP

能开发十三张扑克APP的请联系我&#xff0c;有客户渠道需要这类APP&#xff0c;要开发很多款十三张...