Como executar tarefas recorrentes na estrutura do Python Flask?

Estou construindo um site que fornece algumas informações aos visitantes. Essas informações são agregadas em segundo plano pesquisando algumas APIs externas a cada 5 segundos. O jeito que eu tenho que trabalhar agora é que eu usoAPScheduler empregos. Inicialmente, preferi o APScheduler, porque ele facilita a porta (porque não preciso definir trabalhos cron na nova máquina). Inicio as funções de pesquisa da seguinte maneira:

from apscheduler.scheduler import Scheduler

@app.before_first_request
def initialize():
    apsched = Scheduler()
    apsched.start()

    apsched.add_interval_job(checkFirstAPI, seconds=5)
    apsched.add_interval_job(checkSecondAPI, seconds=5)
    apsched.add_interval_job(checkThirdAPI, seconds=5)

Isso meio que funciona, mas há alguns problemas com isso:

Para iniciantes, isso significa que os trabalhos de intervalo estão sendo executados fora do contexto do Flask. Até o momento, isso não foi um grande problema, mas, ao chamar um terminal, quero que o sistema me envie um email (dizendo "ei, chamando a API X falhou"). Como não é executado no contexto do Flask, no entanto, reclama quefrasco-correio não pode ser executado (RuntimeError('working outside of application context'))Em segundo lugar, eu me pergunto como isso se comportará quando eu não usar mais o servidor de depuração interno do Flask, mas um servidor de produção com, digamos, quatro trabalhadores. Será que vai começar todos os trabalhos quatro vezes?

Em suma, acho que deve haver uma maneira melhor de executar essas tarefas recorrentes, mas não sei como. Alguém aí tem uma solução interessante para esse problema? Todas as dicas são bem-vindas!

[EDIT] Acabei de ler sobreSalsão com a suahorários. Embora eu realmente não veja como o Aipo é diferente do APScheduler e se isso poderia resolver meus dois pontos, pergunto-me se alguém lendo isso pensa que eu deveria investigar mais no Aipo?

[CONCLUSÃO] Cerca de dois anos depois, eu estou lendo isso e achei que poderia informar a vocês o que eu acabei. Imaginei que o @BluePeppers estava certo ao dizer que não deveria estar tão ligado ao ecossistema do Flask. Então, optei por cron-jobs regulares executados a cada minuto, configurados usando o Ansible. Embora isso o torne um pouco mais complexo (eu precisava aprender Ansible e converter algum código para que a execução a cada minuto fosse suficiente), acho que isso é mais robusto. Atualmente, estou usando o incrívelpythonr-rq para enfileirar tarefas de sincronização (verificando APIs e enviando e-mails). Acabei de descobrir sobreagendador rq. Ainda não testei, mas parece fazer exatamente o que eu precisava em primeiro lugar. Talvez essa seja uma dica para futuros leitores desta questão.

Quanto ao resto, desejo a todos um lindo dia!

questionAnswers(1)

yourAnswerToTheQuestion