Agendando job em python no Heroku

eye

      Já fiz alguns posts sobre a dupla Python/Heroku, para quem não viu, olha aqui. 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 e 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 d praticidade ne? 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: 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]

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, para evitar isso pode usar o serviço Kaffeine. Caso deseje saber mais detalhes sobre os comando do CLI, acesse este link.

Abraços e até próxima.

PS: pegaram a referência da imagem do início do post?! Alguém?! kkkk sei que não é igual ao do filme, está mais próxima da versão dos quadrinhos, é o Olho de Agamotto  das HQ’s de Dr.Estranho, nos filmes da Marvel é o portador da Jóia do Tempo, sacou? Sacou? Controle do tempo, agendador, e tal. To na hype eu sei!! rsrs ^_^

Fonte: https://devcenter.heroku.com/articles/clock-processes-python

Postado originalmente em CodigoSimples.net

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s