FastAPI에서 스트리밍 응답을 효과적으로 처리하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-08 15:54:02
원래의
366명이 탐색했습니다.

How to Handle Streaming Responses Effectively in FastAPI?

FastAPI로 스트리밍 응답 처리

FastAPI는 API 호출 중에 클라이언트에 데이터를 스트리밍하기 위해 StreamingResponse 클래스를 제공합니다. 이 기능은 비차단 방식으로 데이터를 스트리밍하기 위한 것이지만, 생성기 기능을 차단 작업과 함께 사용하거나 부적절하게 사용할 경우 문제가 발생할 수 있습니다.

스트리밍 데이터에 대한 향상된 대응

성공을 보장하려면 스트리밍하는 경우 다음을 고려하세요.

  • GET 요청: 가져오기에 POST 대신 GET 요청을 사용하세요. data.
  • 보안 자격 증명: 쿼리 문자열을 통해 자격 증명을 보내지 마세요. 대신 헤더나 쿠키를 사용하세요.
  • 비차단 작업: 차단 작업이 포함된 경우 생성기 함수를 def(비동기 def 아님)로 정의하세요. 또는 비동기 차단 작업과 함께 async def를 사용하세요.
  • 적합한 미디어 유형: 텍스트 대신 응답에 대해 다른 미디어 유형(예: application/json 또는 text/event-stream)을 지정하세요. /plain 또는 X-Content-Type-Options 헤더를 nosniff로 설정하여 MIME 스니핑을 비활성화합니다. 이렇게 하면 브라우저가 응답을 버퍼링하지 않고 데이터가 실시간으로 스트리밍될 수 있습니다.

구현 예

다음 Python 코드를 고려하세요.

# 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)
로그인 후 복사

이 코드는 FastAPI 애플리케이션의 생성기 함수에서 데이터를 스트리밍하고 httpx 라이브러리를 사용하여 이를 사용하는 방법을 보여줍니다.

위 내용은 FastAPI에서 스트리밍 응답을 효과적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿