Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

515
Visualizações
¿Cómo fastapi/uvicorn paraleliza las solicitudes?

Hice un experimento con fastapi y uvicorn cuyo resultado no entiendo.

en el código

 @app.get('/loadtest') def root(): time.sleep(1) return {'message': 'hello'}

corriendo en docker con

 CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]

Hice la siguiente prueba:

 ab -c 100 -n 1000 localhost/loadtest

lo que me da los resultados:

 bersling-2:cas bersling$ ab -c 100 -n 1000 localhost/loadtest This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Completed 1000 requests Finished 1000 requests Server Software: uvicorn Server Hostname: localhost Server Port: 80 Document Path: /loadtest Document Length: 19 bytes Concurrency Level: 100 Time taken for tests: 85.052 seconds Complete requests: 1000 Failed requests: 0 Total transferred: 163000 bytes HTML transferred: 19000 bytes Requests per second: 11.76 [#/sec] (mean) Time per request: 8505.191 [ms] (mean) Time per request: 85.052 [ms] (mean, across all concurrent requests) Transfer rate: 1.87 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.7 0 4 Processing: 1008 7964 1419.3 8010 9022 Waiting: 1004 7963 1419.3 8008 9020 Total: 1008 7965 1418.7 8010 9024 Percentage of the requests served within a certain time (ms) 50% 8010 66% 8016 75% 8988 80% 8989 90% 8993 95% 8998 98% 9003 99% 9006 100% 9024 (longest request)

Así que vemos que esto tarda alrededor de 100 segundos en completarse. Sin embargo, habría esperado 1000, ya que asumiría que las solicitudes deben trabajarse secuencialmente y cada solicitud toma un segundo. Asumí la cola secuencial porque pensé que Python solo puede manejar una solicitud a la vez (en modo síncrono) y no estoy al tanto de que uvicorn generaría múltiples procesos o subprocesos. Entonces, no entiendo cómo es posible el resultado de 100 en lugar del resultado de 1000. ¿Puede alguien por favor explicar?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Para citar los documentos :

Cuando declara una función de operación de ruta con definición normal en lugar de definición asíncrona, se ejecuta en un subproceso externo que luego se espera, en lugar de llamarse directamente (ya que bloquearía el servidor).

O para citar la respuesta de la discusión de github, que es un poco más simple de leer:

Para los puntos finales definidos con def (no async def), FastAPI los ejecutará en un grupo de subprocesos, exactamente como para evitar bloquear el servidor y permitir que se atiendan varias solicitudes en paralelo.

Lo que luego plantea la cuestión de la cantidad de subprocesos concurrentes y cómo se puede controlar. Esta pregunta se aborda aquí .

Por conveniencia de nuevo la cita:

fastAPI se basa en starlette que se usa para controlar ThreadPoolExecutor, pero starlette ahora usa anyio, por lo que no veo una mejor manera que su propuesta:

RunVar("_default_thread_limiter").set(CapacityLimiter(2))

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda