É melhor fazer uma pergunta por ... err ... pergunta.
A biblioteca padrão do Python possui threading
module que possui uma Timer
de classe que faz exatamente o que você precisa. Documentação .
Em relação a push vs pull - é definitivamente melhor quando seu aplicativo recebe uma notificação quando algo acontece (push) em vez de verificar se algo aconteceu a cada segundo (pull) - "estamos lá ainda? já chegamos lá? estamos lá ainda? .. "- porque permite que seu aplicativo apenas durma e não faça nada até que seja notificado, ao invés de fazer a mesma verificação repetida a cada segundo. No entanto, o problema é que, para alguns tipos de atividades, pode ser difícil obter uma notificação, portanto, isso depende da natureza do seu aplicativo. Fazer verificações com muita frequência também é ruim para a duração da bateria e outras coisas.