Já fiz alguns posts sobre a dupla Python/Heroku. O motivo é que ambos tem se mostrado muito práticos e parceiros perfeitos até aqui, pelo menos na minha opinião e para os projetos que tenho feito. O post de hoje é para mostrar de uma forma rápida e prática com pegar aquele seu código python e agendar ele para executar a cada X minutos no Heroku. Vamos nessa?
Sem enrolação vamos nessa, a ideia é: quero colocar um código em python que fiz para executar a cada 3 minutos? E agora? Se hospedar no meu PC vou ter que deixar ele ligado o 24/7, não tenho grana para pagar uma hospedagem, o que fazer? Simples, cria uma conta no Heroku e cria um app lá dentro, vou pular esta parte pois senão o post fica gigante, partindo disso, siga os passos:
1 INSTALAR MÓDULO APSCHEDULER
pip install APScheduler==3.0.0
2 CÓDIGO EM PYTHON
O código que usei apenas exibi uma mensagem no console, criei um arquivo jobs.py, fique a vontade para ser criativo:
from apscheduler.schedulers.blocking import BlockingScheduler sched = BlockingScheduler() @sched.scheduled_job('interval', minutes=3) def timed_job(): print('This job is run every three minutes.') sched.start()
O import BlockingScheduler é apenas um dos 3 tipos possíveis e provavelmente o mais comum, se quiser conhecer os outros veja detalhes aqui. A linha mais importante é a
@sched.scheduled_job('interval', minutes=3)
É esta propriedade que prefixamos na função “timed_job” que determina a frequencia de execução, nesse exemplo a cada 3 minutos. Mas poderia ser mais específico também:
@sched.scheduled_job('cron', day_of_week='mon-wed', hour=14) def scheduled_job(): print('Este job roda de Segunda à Quarta as 2hrs da tarde.')
3 PREPARAR APP PARA HEROKU
Alguns requisitos precisam ser obedecidos antes subirmos nosso job pro heroku, 3 arquivos para ser mais exato:
- runtime.txt: contém a versão do python que será executada no Heroku –> python-3.6.5.
- requirements.txt: deve ficar as libs que devem ser isntaladas no Heroku –> APScheduler==3.0.0
- Procfile: arquivo padrão de configuração do heroku usado apra determiar o tipo da aplicação e como será interpretada, o conteúdo é: clock: python jobs.py
Obs: o nome “jobs.py” foi escolha minha, poderia ser outro, contanto que seja igual o arquivo.
4 DEPLOY
Essa parte da um trabalho mas vou tentar simplificar, existem 3 formas de deploy no heroku: via github, via dropbox ou CLI. Eu uso dropbox e recomendo para que possui porque é bem rápido, lembra que falei da praticidade correto? Ao acessar seu app no Heroku e clicar na aba “DEPLOY”, clique em Dropbox para fazer a integração com sua conta e voilá! Ele cria uma pasta no seu dropbox com o nome do app e basta jogar os arquivos lá:
Feito isso jogue os arquivos na pasta do Dropbox que foi criada, nesse meu caso a pasta ficou com o nome “casadeleiloes-crawler”, espere terminar o upload. Role a página até embaixo e clique no botão roxo DEPLOY. Será mostrado o log de build, instalação das libs do arquivo requirements.txt e no final, se tudo correr bem, a mensagem “DONE”.
5 SCALE VIA HEROKU CLI
Parte mais chata, porém necessária, precisamos configurar mais uma coisa no Heroku, para isso usaremos a linha de comando:
Baixe aqui o Heroku CLI. Instale.
Faça o LOGIN:
heroku login
Enter your Heroku credentials.
Email: adam@example.com
Password (typing will be hidden):
Authentication successful.
Agora vamos acessar nosso app criado e configurar no Dyno(server) para evitar múltiplas execuções simultâneas:
heroku app:ps:scale clock=1 --app [nome_do_app]
Tranquilo né? Você pode visualizar o log no canto direito superior do seu painel no Heroku, em “More” > “View logs”.
Pronto! Lembrando que o plano free do Heroku dá um shutdown se seu app ficar mais de 30 minutos inativo. Caso deseje saber mais detalhes sobre os comando do CLI, acesse este link.
Abraços e até próxima.
Fonte: https://devcenter.heroku.com/articles/clock-processes-python