Chame os três concorrentemente em vez de em sequência. Num framework async, dispare os três com asyncio.gather ou um task group para a latência total ser a da chamada mais lenta, não a soma. Dê timeout a cada chamada, decida quais respostas são opcionais para poder degradar em vez de falhar, e faça cache do que for estável. Se o cliente tolerar, devolva um id de job.
Por que os entrevistadores perguntam isso
Essa é uma pergunta de design de sistemas vestida de Python. O entrevistador quer instintos de concorrência, mas mais do que isso quer pensamento de falha: timeouts em toda chamada de rede, degradação parcial, e o que o usuário vê quando uma dependência está fora. Candidatos que respondem só gather e param aí nunca rodaram nada que dependa de serviços fora do controle deles.
Como estruturar sua resposta
- Transforme chamadas sequenciais em concorrentes.
- Ponha timeout em toda chamada de saída.
- Decida o que é opcional e degrade com elegância.
- Adicione cache ou mova o trabalho para um job em background.
Exemplo de resposta
Em sequência aquelas três latências somam, então o primeiro movimento é rodar juntas. Com httpx e um handler async eu junto as três corrotinas num gather, ou uso um task group para uma falha cancelar as irmãs de forma limpa, e aí o endpoint custa aproximadamente o upstream mais lento em vez da soma. Toda chamada ganha um timeout explícito, porque o padrão na maioria dos clientes é efetivamente infinito e um socket travado vai esgotar o pool de workers. Depois eu decido o que é essencial. Se dois dos três são enfeite, eu coleto exceções em vez de levantar e renderizo a página sem eles em vez de devolver um quinhentos, e emito uma métrica para a gente saber que aconteceu. Qualquer coisa estável ganha cache, já que mesmo sessenta segundos de cache tiram a maior parte da carga. Se o cliente tolerar, o formato melhor é aceitar o request, enfileirar o trabalho e devolver um id de job para consultar, o que tira a latência dos upstreams do caminho do request por completo.
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
- O que acontece se um upstream travar além do seu timeout?
- Como você propaga cancelamento por essas tasks?
- Onde você colocaria um circuit breaker?
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