Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Respons Penstriman dengan Berkesan dalam FastAPI?

Bagaimana Mengendalikan Respons Penstriman dengan Berkesan dalam FastAPI?

Linda Hamilton
Linda Hamiltonasal
2024-11-08 15:54:02287semak imbas

How to Handle Streaming Responses Effectively in FastAPI?

Mengendalikan Respons Penstriman dengan FastAPI

FastAPI menyediakan kelas StreamingResponse untuk menstrim data kepada pelanggan semasa panggilan API. Walaupun fungsi ini bertujuan untuk menstrim data secara tidak menyekat, isu boleh timbul apabila menggunakan fungsi penjana dengan operasi menyekat atau penggunaan yang tidak betul.

Tindak Balas Dipertingkatkan untuk Data Penstriman

Untuk memastikan kejayaan penstriman, pertimbangkan perkara berikut:

  • GET Request: Gunakan permintaan GET bukannya POST untuk mengambil data.
  • Kelayakan Selamat: Elakkan daripada menghantar bukti kelayakan melalui rentetan pertanyaan; gunakan pengepala atau kuki sebaliknya.
  • Operasi Tidak Menyekat: Takrifkan fungsi penjana sebagai def (bukan async def) jika ia mengandungi operasi menyekat. Secara bergantian, gunakan async def dengan operasi penyekatan tak segerak.
  • Jenis Media yang Sesuai: Tentukan jenis media yang berbeza untuk respons (cth., application/json atau text/event-stream) dan bukannya teks /plain, atau lumpuhkan penghidu MIME dengan menetapkan pengepala X-Content-Type-Options kepada nosniff. Ini memastikan penyemak imbas tidak menampan respons, membenarkan data distrim dalam masa nyata.

Contoh Pelaksanaan

Pertimbangkan kod Python berikut:

# app.py
from fastapi import FastAPI, StreamingResponse
from fastapi.responses import 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')
    # or, use:
    '''
    headers = {'X-Content-Type-Options': 'nosniff'}
    return StreamingResponse(fake_data_streamer(), headers=headers, media_type='text/plain')
    '''

# test.py (using httpx)
import httpx

url = 'http://127.0.0.1:8000/'

with httpx.stream('GET', url) as r:
    for chunk in r.iter_raw():  # or, for line in r.iter_lines():
        print(chunk)

Kod ini menunjukkan cara menstrim data daripada fungsi penjana dalam aplikasi FastAPI dan menggunakannya menggunakan perpustakaan httpx.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Respons Penstriman dengan Berkesan dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn