Agendando job em python no Heroku

0

     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á:

heroku1

Painel do Heroku. Aba Deploy. Dropbox sincronizado.

   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: [email protected]
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]heroku2

 

Tranquilo né? Você pode visualizar o log no canto direito superior do seu painel no Heroku, em “More” > “View logs”.

heroku3.JPG

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

Compartilhe.

Sobre o autor

Programador, apaixonado por games, empreendedor. Formado em Ciência da Computação com especialização em desenvolvimento para web, trabalhei com projetos .Net C#, NodeJs e Python nestes 10 anos de experiência no setor privado, em orgão públicos e na minha startup, o EstoqueMestre. http://rodrigoreisf.com.br