>  기사  >  백엔드 개발  >  FastAPI의 UploadFile 처리가 Flask보다 느린 이유는 무엇입니까?

FastAPI의 UploadFile 처리가 Flask보다 느린 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-08 11:18:021024검색

Why is FastAPI's UploadFile Handling Slower Than Flask's?

Flask와 비교한 FastAPI UploadFile 성능 문제

FastAPI의 UploadFile 처리는 파일 처리의 차이로 인해 Flask보다 느릴 수 있습니다. Flask는 동기식 파일 쓰기를 사용하는 반면 FastAPI의 UploadFile 메소드는 비동기식이며 기본 크기가 1MB인 버퍼를 사용합니다.

향상된 성능 솔루션

성능을 향상하려면 구현 aiofiles 라이브러리를 사용하여 비동기식으로 파일 쓰기:

<code class="python">from fastapi import File, UploadFile
import aiofiles

@app.post("/upload")
async def upload_async(file: UploadFile = File(...)):
    try:
        contents = await file.read()
        async with aiofiles.open(file.filename, 'wb') as f:
            await f.write(contents)
    except Exception:
        return {"message": "There was an error uploading the file"}
    finally:
        await file.close()

    return {"message": f"Successfully uploaded {file.filename}"}</code>

추가 참고 사항

  • 이 접근 방식은 전체 파일을 메모리에 유지하므로 대용량 파일에는 적합하지 않을 수 있습니다.
  • 청크 파일 업로드의 경우 더 작은 버퍼 크기로 wait file.read() 메서드를 사용하는 것이 좋습니다.
  • 또는 run_in_threadpool()과 함께 quitil.copyfileobj()를 사용하여 별도의 스레드에서 차단 작업을 수행하여 기본 스레드의 응답성을 유지합니다.

스트리밍 솔루션

더 나은 성능을 위해 다음과 같이 요청 본문에 액세스하는 것을 고려하세요. 전체 본문을 메모리나 임시 디렉터리에 저장하지 않고 스트림:

<code class="python">from fastapi import Request
import aiofiles

@app.post("/upload")
async def upload_stream(request: Request):
    try:
        filename = request.headers['filename']
        async with aiofiles.open(filename, 'wb') as f:
            async for chunk in request.stream():
                await f.write(chunk)
    except Exception:
        return {"message": "There was an error uploading the file"}

    return {"message": f"Successfully uploaded {filename}"}</code>

위 내용은 FastAPI의 UploadFile 처리가 Flask보다 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.