【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的執行進度

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713131.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713131.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713131.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見的幾種httpclient

工作是spring 項目一般都是使用ResTemplate 但是還是有些項目中會用到httpClient&#xff0c;沒有毛用。 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> …

pclpy 點云法線

pclpy 點云法線 一、算法原理1.理論入門2.選擇正確的比例 二、代碼三、結果四、相關數據 一、算法原理 表面法線是幾何表面的重要屬性&#xff0c;在許多領域&#xff08;例如計算機圖形應用程序&#xff09;中大量使用&#xff0c;以應用正確的光源來生成陰影和其他視覺效果。…

緩存穿透--一起學習吧之架構

緩存穿透是指查詢一個一定不存在的數據&#xff0c;由于緩存是不命中時需要從數據庫查詢&#xff0c;查不到數據則不寫入緩存&#xff0c;這將導致這個不存在的數據每次請求都要到數據庫去查詢&#xff0c;進而給數據庫帶來壓力。在高并發場景下&#xff0c;如果某個key被高并發…

Android 混淆是啥玩意兒?

什么是混淆 Android混淆&#xff0c;是伴隨著Android系統的流行而產生的一種Android APP保護技術&#xff0c;用于保護APP不被破解和逆向分析。簡單的說&#xff0c;就是將原本正常的項目文件&#xff0c;對其類、方法、字段&#xff0c;重新命名a,b,c…之類的字母&#xff0c…

森林滅火利器|便攜式森林消防滅火泵|恒峰智慧科技

隨著人們對環境保護意識的不斷提高&#xff0c;森林防火工作顯得尤為重要。然而&#xff0c;傳統的森林滅火方式存在諸多不便&#xff0c;如火勢蔓延迅速、滅火效率低下等。為了更好地保護森林資源&#xff0c;科學家們研發出了一種便攜式森林消防滅火泵&#xff0c;它的出現為…

利用css實現常見圖形

1、正圓形 給正方形盒子設置圓角屬性為寬高的50%。 div {width: 100px;height: 100px;background-color: plum;border-radius: 50%; } 2、膠囊形 給長方形盒子設置圓角屬性為盒子高度的50%。 div {width: 200px;height: 100px;background-color: plum;border-radius: 50px…

基于C#開發OPC DA客戶端——基于OPCDAAuto

OPC DA OPC DA(OPC Data Access)&#xff0c;即OPC數據訪問接口&#xff0c;定義了數據交換的規范&#xff0c;包括&#xff1a;過程值、更新時間、數據品質等信息。 自動化接口中共定義了6類對象&#xff1a;OPCServer對象、OPCBrowser對象、OPCGroups對象、OPCGroup對象、O…

steloj勒索病毒:[steloj@mailfence.com].steloj襲擊了您的計算機?

引言&#xff1a; 在數字時代&#xff0c;我們的數據是我們最寶貴的資產之一。然而&#xff0c;隨著科技的進步&#xff0c;網絡犯罪也在不斷演變。最新的威脅之一就是.[stelojmailfence.com].steloj勒索病毒。這種惡意軟件不僅能夠加密你的數據&#xff0c;而且還會要求贖金以…

C++11之字符串與數值之間的轉換

C11之字符串與數值之間的轉換 數值轉換為字符串字符串轉換為數值 在C11中提供了專門的類型轉換函數&#xff0c;程序猿可以非常方便的使用它們進行數值類型和字符串類型之間的轉換。 數值轉換為字符串 使用to_string()方法可以非常方便地將各種數值類型轉換為字符串類型&#…

如何做代幣分析:以 SHIB 幣為例

作者&#xff1a;lesleyfootprint.network 編譯&#xff1a;cicifootprint.network 數據源&#xff1a;SHIB Token Dashboard &#xff08;僅包括以太坊數據&#xff09; 在加密貨幣和數字資產領域&#xff0c;代幣分析起著至關重要的作用。代幣分析指的是深入研究與代幣相關…

貪心算法 —— 字典序刪除字符

題目描述 給定一個單詞&#xff0c;請問在單詞刪除t個字母之后&#xff0c;能得到的字典序最小的單詞是什么&#xff1f; 輸入描述 輸入的第一行包含一個單詞&#xff0c;有大寫英文字母組成 第二行包含一個正整數t 其中&#xff0c;單詞長度不超過100&#xff0c;t小于單…

qt學習:串口調試助手

目錄 步驟 配置ui界面 注意 新建一個自定義復選框類MyComboBox,并繼承自帶的復選框類 重寫一個鼠標左鍵按下事件,按下就發送信號 定義一個信號 本身ui界面類.h 添加頭函數 定義成員數據和成員函數(槽函數) 本身ui界面類.cpp 構造函數 發送數據槽函數 接收數據…

3、Redis-List【常用】

目錄 一、重要特點 二、常用命令 三、Redis中List類型應用場景 一、重要特點 ①Redis中的List&#xff0c;視為雙向鏈表 ②Redis中的List&#xff0c;數據可以重復 二、常用命令 常用命令 格式含義例子rpush key value從右邊往key中添加value值rpush hobby java pythonlpu…

保姆教程 Docker 部署微服務項目

大家好&#xff0c;我是奇兵。 文章比較長&#xff0c;請耐心看完&#xff01; 項目上線是每位學編程同學必須掌握的基本技能。之前我已經給大家分享過很多種上線單體項目的方法了&#xff0c;今天再出一期微服務項目的部署教程&#xff0c;用一種最簡單的方法&#xff0c;帶…

備戰藍橋杯Day18 - 雙鏈表

一、每日一題 藍橋杯真題之工作時長 這個題寫代碼做的話很麻煩&#xff0c;而且我也不一定能寫出來&#xff0c;所以我直接就是用的excel來計算的時間和。 使用excel的做法 1.先把文件中的時間復制到excel中。 2.把日期和時間分到兩列。 分成兩列的步驟&#xff1a; 選中要…

基于單片機的節能窗控制系統設計

摘 要:本文以單片機為基礎,對節能窗控制系統進行了科學設計,在滿足日常生活需求的同時更好地實現節能減排目標。此設計中的節能窗控制系統,實際操作要靈活,具備可靠且穩定的性能,同時具備節能功效。 關鍵詞:單片機;節能窗控制系統;系統設計 在節能窗等概念推廣的背景…

css實現一行靠右,多行靠左

利用 inline-block 可以根據內容寬度變化的特性 如果內容多到折行了&#xff0c;那自身的寬度會和父級同寬&#xff0c;同寬后&#xff0c;產生折行&#xff0c;這時候就生效了… <!DOCTYPE html> <html lang"en"> <head><meta charset"U…

Atcoder ABC342 E - Last Train

Last Train&#xff08;最后一班火車&#xff09; 時間限制&#xff1a;2s 內存限制&#xff1a;1024MB 【原題地址】 所有圖片源自Atcoder&#xff0c;題目譯文源自腳本Atcoder Better! 點擊此處跳轉至原題 【問題描述】 【輸入格式】 【輸出格式】 【樣例1】 【樣例輸入…

2. this 指向問題

this 指向問題 前言 當一個函數調用時&#xff0c;會創建一個執行上下文&#xff0c;這個上下文包括函數調用的一些信息(調用棧&#xff0c;傳入參數&#xff0c;調用方式)&#xff0c;this就指向這個執行上下文。 this 不是靜態的&#xff0c;也并不是在編寫的時候綁定的&am…

java-類和對象-構造方法

類: 屬性 和 方法1. 屬性 與 變量 的 區別屬性 位于 類中 ,變量 位于方法中,2. void 與 returnvoid 無返回值類型return 返回XXXx, return 意味著 方法 執行 結束,return 后面表達式的數據類型必須與方法的返回值類型 一致訪問修飾符 返回值類型 方法名(){}3. 方法的調…