Mengapa FastAPI StreamingResponse Saya Gagal Menstrim dengan Fungsi Penjana?

Mary-Kate Olsen
Lepaskan: 2024-11-08 12:37:02
asal
797 orang telah melayarinya

Why is My FastAPI StreamingResponse Failing to Stream with a Generator Function?

FastAPI StreamingResponse Gagal Menstrim dengan Fungsi Penjana

StreamingResponse FastAPI ialah cara mudah untuk menghantar data kembali kepada pelanggan secara berperingkat, tetapi kadang-kadang ia mungkin tidak berkelakuan seperti yang diharapkan, terutamanya apabila menggunakan fungsi penjana. Di sini, kita akan menyelidiki potensi punca dan penyelesaian masing-masing.

Punca dan Penyelesaian Biasa:

1. Kaedah HTTP dan Pengendalian Kredensial yang Salah:

Elakkan menggunakan permintaan POST untuk mendapatkan data. Sebaliknya, pilih permintaan GET. Selain itu, adalah sangat disyorkan untuk menggunakan pengepala atau kuki untuk bukti kelayakan dan bukannya parameter pertanyaan untuk meningkatkan keselamatan dan mengelakkan pencemaran parameter URL.

2. Operasi Menyekat dalam Fungsi Penjana:

Jika fungsi penjana anda termasuk menyekat operasi I/O atau intensif CPU, gunakan def dan bukannya async def untuk mengelakkan kemungkinan kebuntuan dan gangguan gelung peristiwa. Sebagai alternatif, jika menggunakan async def, laksanakan operasi menyekat dalam ThreadPool atau ProcessPool yang berasingan.

3. Pemisah Baris Tidak Lengkap:

Jika anda menggunakan permintaan' iter_lines() untuk mengulangi data respons, pertimbangkan bahawa ia membaca respons baris demi baris. Untuk memastikan data dipaparkan semasa ia tiba, sama ada ubah suai respons anda untuk memasukkan pemisah baris atau gunakan iter_content() dengan saiz ketulan yang ditentukan.

4. Jenis Media dan Menghidu MIME:

Penyemak imbas mungkin menimbal respons teks/biasa untuk mengesan jenis kandungan. Untuk memintas perkara ini, gunakan jenis media yang berbeza (cth., application/json atau text/event-stream) atau lumpuhkan penghidu MIME dengan menetapkan pengepala X-Content-Type-Options kepada nosniff.

Contoh Penyelesaian:

Di bawah ialah pelaksanaan apl FastAPI yang berfungsi yang menstrim data palsu dan menangani isu yang dinyatakan:

from fastapi import FastAPI
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():
    headers = {'X-Content-Type-Options': 'nosniff'}
    return StreamingResponse(fake_data_streamer(), headers=headers, media_type='text/plain')
Salin selepas log masuk

Perlu diingat bahawa pengendalian respons penstriman mungkin berbeza-beza bergantung pada klien (penyemak imbas web, klien HTTP, dll.) dan fungsi masing-masing.

Atas ialah kandungan terperinci Mengapa FastAPI StreamingResponse Saya Gagal Menstrim dengan Fungsi Penjana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!