"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que o UploadFile do FastAPI às vezes é mais lento que o Flask?

Por que o UploadFile do FastAPI às vezes é mais lento que o Flask?

Publicado em 2024-11-09
Navegar:987

Why is FastAPI's UploadFile Sometimes Slower Than Flask?

Desempenho do FastAPI UploadFile comparado ao Flask

O desempenho do UploadFile no FastAPI pode ser mais lento do que no Flask devido a diferenças no tratamento de dados. O UploadFile do FastAPI utiliza métodos assíncronos que podem resultar em gargalos se não forem tratados de forma eficiente, enquanto o Flask usa métodos síncronos.

Veja por que o UploadFile do FastAPI pode ser mais lento:

  • Bloqueio de E/S: Por padrão, os métodos UploadFile do FastAPI usam operações de bloqueio de E/S, o que pode atrapalhar o thread principal e tornar a API mais lenta.
  • Pedaço de dados: Starlette (a estrutura subjacente para FastAPI) usa um SpooledTemporaryFile com um max_size padrão de 1 MB. Quando os dados excedem esse tamanho, eles são gravados em um arquivo temporário no disco, adicionando outro nível de sobrecarga de E/S.

Práticas recomendadas para uploads de arquivos eficientes no FastAPI:

Escrita assíncrona de arquivos com aiofiles

Use a gravação assíncrona de arquivos com a biblioteca aiofiles para gravar arquivos de maneira sem bloqueio. Essa abordagem melhora o desempenho, especialmente para arquivos grandes.

Lendo o arquivo em pedaços

Considere ler o arquivo em pedaços de um tamanho especificado para evitar carregar o arquivo inteiro na memória. Isso evita problemas de memória e melhora o desempenho para uploads de arquivos grandes.

Usando run_in_threadpool()

Para evitar o bloqueio do thread principal, use a função run_in_threadpool() do FastAPI para executar operações de bloqueio de E/S em um tópico separado. Isso garante a execução sem bloqueio de tarefas relacionadas a arquivos.

Acessando diretamente o corpo da solicitação como um fluxo

Nos casos em que o armazenamento de arquivos no servidor não é necessário, acesse o corpo da solicitação diretamente como um transmitir usando request.stream(). Este método permite o manuseio eficiente de arquivos sem incorrer em sobrecarga desnecessária de E/S.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3