StreamingResponse 不使用產生器函數進行串流處理
FastAPI 提供 StreamingResponse 類別來將回應增量傳送回客戶端。然而,在某些情況下,此功能可能無法如預期般運作。
根本原因調查
分析提供的FastAPI 代碼和問題描述後,我們已經確定幾個潛在的原因:
1 。使用POST請求進行資料請求:
使用POST請求不適合從伺服器請求資料。相反,建議使用 GET 請求來實現此目的。
2.使用查詢參數進行驗證:
透過查詢參數發送敏感憑證(例如 auth_key)是不安全的。考慮使用標頭或 cookie 進行身份驗證。
3.阻塞產生器函數:
StreamingResponse 中的生成器函數是使用def(不是非同步def)定義的,這可能會導致FastAPI 事件循環中出現阻塞問題。
4.基於行的分塊:
請求的 iter_lines() 一次迭代一行回應資料。如果回應中不存在換行符,則不會增量列印資料。
5. MIME 嗅探:
某些瀏覽器(例如 Chrome)可能會緩衝文字/純文字回應,以便在顯示純文字內容之前檢查它們。這可能會阻礙串流媒體傳輸。
建議修正:
1.使用 GET 要求:
重構程式碼以使用 GET 請求來取得資料。
2.安全驗證:
使用標頭或 cookie 安全地傳送驗證憑證。
3.非同步產生器函數:
使用 async def 定義 StreamingResponse 的產生器函式。如果生成器內需要任何阻塞操作,請使用外部執行緒池來執行它們。
4.基於區塊的分塊:
使用 iter_content() 而不是 iter_lines() 來迭代區塊中的回應資料。指定適當的區塊大小。
5.停用MIME 嗅探:
透過為StreamingResponse 指定不同的媒體類型(例如application/json 或text/event-stream)或將X-Content-Type -Options 標頭設定為nosniff 來停用MIME 嗅探。
工作範例:
以下程式碼示範具有串流功能的工作 FastAPI 應用程式:
from fastapi import FastAPI, StreamingResponse import asyncio app = FastAPI() async def fake_data_streamer(): for i in range(10): yield b'some fake data\n\n' await asyncio.sleep(0.5) @app.get('/') async def main(): return StreamingResponse(fake_data_streamer(), media_type='text/event-stream')
以上是為什麼我的 FastAPI StreamingResponse 不能使用生成器函式?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

ArraySareAryallyMoremory-Moremory-forigationDataDatueTotheIrfixed-SizenatureAntatureAntatureAndirectMemoryAccess.1)arraysStorelelementsInAcontiguxufulock,ReducingOveringOverheadHeadefromenterSormetormetAdata.2)列表,通常

ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

Python列表可以存儲不同類型的數據。示例列表包含整數、字符串、浮點數、布爾值、嵌套列表和字典。列表的靈活性在數據處理和原型設計中很有價值,但需謹慎使用以確保代碼的可讀性和可維護性。

Pythondoesnothavebuilt-inarrays;usethearraymoduleformemory-efficienthomogeneousdatastorage,whilelistsareversatileformixeddatatypes.Arraysareefficientforlargedatasetsofthesametype,whereaslistsofferflexibilityandareeasiertouseformixedorsmallerdatasets.

theSostCommonlyusedModuleForCreatingArraysInpyThonisnumpy.1)NumpyProvidEseffitedToolsForarrayOperations,Idealfornumericaldata.2)arraysCanbeCreatedDusingsnp.Array()for1dand2Structures.3)

toAppendElementStoApythonList,usetheappend()方法forsingleements,Extend()formultiplelements,andinsert()forspecificpositions.1)useeAppend()foraddingoneOnelementAttheend.2)useextendTheEnd.2)useextendexendExendEnd(

TocreateaPythonlist,usesquarebrackets[]andseparateitemswithcommas.1)Listsaredynamicandcanholdmixeddatatypes.2)Useappend(),remove(),andslicingformanipulation.3)Listcomprehensionsareefficientforcreatinglists.4)Becautiouswithlistreferences;usecopy()orsl

金融、科研、医疗和AI等领域中,高效存储和处理数值数据至关重要。1)在金融中,使用内存映射文件和NumPy库可显著提升数据处理速度。2)科研领域,HDF5文件优化数据存储和检索。3)医疗中,数据库优化技术如索引和分区提高数据查询性能。4)AI中,数据分片和分布式训练加速模型训练。通过选择适当的工具和技术,并权衡存储与处理速度之间的trade-off,可以显著提升系统性能和可扩展性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

記事本++7.3.1
好用且免費的程式碼編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。