Tire ela do event loop. Embrulhe a chamada bloqueante em asyncio.to_thread, ou use run_in_executor com um thread pool, para o loop ficar livre para atender outros requests. Se o trabalho for CPU bound, mande para um process pool ou para um worker em background como o Celery. Deixada inline, uma chamada lenta trava todos os outros requests naquele worker.
Por que os entrevistadores perguntam isso
Bloquear o loop é o erro definidor do async, e ele produz o pior tipo de indisponibilidade: latência que parece ótima em teste e desmorona sob carga. O entrevistador quer prova de que você entende escalonamento cooperativo, que nada preempta uma corrotina, e que você sabe que o FastAPI já roda endpoints com def normal num threadpool, o que costuma ser a resposta correta mais simples.
Como estruturar sua resposta
- Explique por que bloquear o loop é fatal.
- Ofereça to_thread ou um executor para I/O.
- Direcione trabalho CPU bound para processos ou uma fila.
- Mencione a opção de endpoint com def normal no FastAPI.
Exemplo de resposta
O motivo de isso importar é que o asyncio é cooperativo e single threaded, então uma corrotina segura o loop até dar await em alguma coisa. Uma chamada bloqueante de driver dentro de um handler async congela todos os outros requests em voo naquele worker, e com tráfego baixo você nunca vai perceber. A correção mais barata no FastAPI é definir o endpoint com def normal em vez de async def, e o framework roda ele no threadpool dele para você. Se eu preciso disso dentro de uma função async, o asyncio.to_thread embrulha a chamada e espera o resultado. Onde eu tomo cuidado é no tamanho do thread pool, porque o padrão é pequeno e uma dependência lenta vai formar fila atrás dele, então eu dimensiono contra a concorrência que espero e adiciono timeout. Para qualquer coisa pesada de CPU, threads não ajudam na build padrão, então vai para um process pool ou para um worker do Celery. Pegamos um caso desses com um cliente SOAP legado que levava oito segundos, e a latência p99 de um serviço inteiro estava acompanhando aquela única chamada.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você detectaria um loop bloqueado em produção?
- O que o modo debug do asyncio reporta?
- Um driver de banco síncrono é aceitável ali em algum caso?
Mais perguntas para Desenvolvedor Python
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas