Pergunta de entrevista para Desenvolvedor Python

Como você faria o profiling de um serviço Python que ficou mais lento depois de um release?

O que o entrevistador está avaliando, como estruturar sua resposta e um exemplo falado que você pode adaptar.

Resposta rápida

Comece estreitando para onde o tempo vai antes de tocar em código. Compare o diff do release, olhe tracing ou métricas de tempo para achar o endpoint lento, e aí faça profiling daquele caminho com cProfile ou py-spy, que consegue amostrar um processo vivo sem restart. Olhe tempo cumulativo para achar a chamada responsável, forme uma hipótese, mude uma coisa e meça de novo.

Por que os entrevistadores perguntam isso

Perguntas de performance separam quem mede de quem chuta. O entrevistador procura um método: reproduzir, medir, isolar, mudar uma variável, verificar. Eles também querem fluência de ferramenta, em particular um profiler de amostragem que consegue se anexar a um processo de produção rodando, e o discernimento de saber que a maior parte da lentidão em Python acaba sendo trabalho de banco ou de rede, e não do interpretador.

Como estruturar sua resposta

  • Estabeleça o que mudou e para onde o tempo vai.
  • Cite o profiler que você anexaria e por quê.
  • Leia tempo cumulativo, não só tempo próprio.
  • Mude uma coisa e meça a diferença.

Exemplo de resposta

Exemplo falado, em primeira pessoa

A primeira pergunta é o que de fato mudou, porque um release me dá uma lista curta de suspeitos. Depois eu quero números, não opiniões, então spans de tracing ou tempo por endpoint me dizem qual rota regrediu e se o tempo está no banco, numa chamada upstream ou no próprio processo. Se está no processo, o py-spy é o meu primeiro recurso porque ele se anexa a um container rodando e amostra sem restart, então eu consigo perfilar a carga real de produção em vez de uma sintética. Um flame graph normalmente deixa óbvio. Para um caso local reproduzível eu uso cProfile e ordeno por tempo cumulativo, já que o tempo próprio esconde o chamador que é o verdadeiro responsável. Um cuidado: fazer profiling altera a temporização, então eu nunca confio nos números absolutos dele, só na forma relativa. Aí eu mudo exatamente uma coisa e meço de novo. Da última vez que fiz isso o culpado era um serializer novo fazendo uma cópia profunda por linha, e matar essa cópia levou o endpoint de quatrocentos milissegundos de volta para noventa.

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 funciona

Perguntas de acompanhamento que você pode esperar

  • Como o py-spy difere do cProfile?
  • Como você faria profiling de memória em vez de tempo?
  • E se a regressão só aparece sob carga?

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

Ensaie as perguntas difíceis antes que elas apareçam

Pratique com um copiloto ao vivo e depois entre pronto. Um Session Pass de $29 te leva até o fim da entrevista, sem assinatura e sem amarras.

Instalar o GhostPilot