1. Introdução à biblioteca schedule
Nesta aula, como verdadeiros mestres do tempo, vamos aprender a agendar tarefas para que nosso código funcione quando quisermos. Prepare-se, hoje vamos domar o tempo!
A biblioteca schedule
é um módulo leve para executar funções em horários definidos.
Se o seu código precisa ser executado em horários específicos, como coletar dados todos os dias às 6
da manhã ou enviar lembretes diários, então a schedule
é o que você precisa.
Aqui estão as principais vantagens do schedule
:
- Simplicidade: interface intuitiva, muito mais fácil de usar do que soluções padrão como
cron
outhreading
. - Minimalismo: nada de funções desnecessárias — apenas o essencial.
- Clareza: uso de uma linguagem quase natural para configurar os agendamentos.
Instalando a biblioteca
Para começar a trabalhar, é necessário instalar a biblioteca schedule
. Como na maioria das
bibliotecas em Python, usamos o pip
:
pip install schedule
Agora que tudo está pronto, vamos mergulhar no mundo da automação e ver como o schedule
pode
transformar sua rotina.
Métodos principais da biblioteca schedule
A biblioteca schedule
fornece métodos para configurar tarefas em diferentes horários e frequências:
every().day.at("HH:MM")
— executa uma tarefa todos os dias em um horário específico.every().hour
— executa uma tarefa a cada hora.every().minute
— executa uma tarefa a cada minuto.every().week.at("HH:MM")
— executa uma tarefa toda semana em um horário específico.every().monday.at("HH:MM")
— executa uma tarefa às segundas-feiras em um horário específico.every(10).seconds
— executa uma tarefa a cada 10 segundos (ou qualquer outro intervalo de tempo).
2. Configurando tarefas recorrentes
Vamos começar com algo simples — agendamos uma função que será executada a cada hora. Vamos criar uma função simples que exibe uma mensagem de boas-vindas e agendá-la.
Exemplo: saudação a cada hora
import schedule
import time
def say_hello():
print("Oi! Estamos trabalhando na automação por hora.")
# Agendamos a função say_hello para ser executada a cada hora
schedule.every().hour.do(say_hello)
while True:
# Executa todas as tarefas cujo horário chegou
schedule.run_pending()
time.sleep(1)
E é isso — seu primeiro script com schedule
! Neste exemplo, usamos o método
every().hour.do(say_hello)
para dizer "Oi!" a cada hora. Interessante, né?
A chamada schedule.every().hour.do(say_hello)
não executa a função say_hello
, mas sim adiciona
sua chamada ao agendamento. A execução real da função ocorrerá quando for o horário - ela será chamada com
o código schedule.run_pending()
.
3. Configurando intervalos mais complexos
O que acontece se quisermos executar tarefas não apenas a cada hora, mas também, por exemplo, a cada 10 minutos ou em dias específicos da semana? O schedule
suporta a maioria das expressões de tempo comuns, e você pode usá-las com a mesma facilidade.
Exemplo: tarefa a cada 10 minutos
import schedule
import time
def task():
print("Essa tarefa é executada a cada 10 minutos.")
# Agende a execução da tarefa a cada 10 minutos
schedule.every(10).minutes.do(task)
while True:
schedule.run_pending() # Executa todas as tarefas cujo horário chegou
time.sleep(1)
Exemplo: tarefa em dias específicos
Agora, vamos agendar uma tarefa para ser executada em dias específicos da semana, por exemplo, às segundas e quartas-feiras, mas apenas às 9 da manhã.
import schedule
import time
def monday_wednesday_task():
print("Essa tarefa é executada às segundas e quartas-feiras às 9 da manhã.")
# Executa a tarefa às segundas e quartas-feiras às 9 da manhã
schedule.every().monday.at("09:00").do(monday_wednesday_task)
schedule.every().wednesday.at("09:00").do(monday_wednesday_task)
while True:
schedule.run_pending()
time.sleep(1)
Como você pode ver, o schedule
lida com diferentes expressões de tempo, incluindo dias da semana e horários específicos de execução. Isso é incrivelmente conveniente para planejar tarefas sincronizadas com seu trabalho ou eventos agendados.
4. Lidando com tarefas com diferentes condições de tempo
Se seu script executa várias tarefas, e cada uma delas tem seu próprio cronograma, o schedule
pode lidar com isso facilmente. Por exemplo, uma tarefa pode ser executada todas as manhãs, e outra — às sextas-feiras.
Exemplo: combinando diferentes tarefas em um único script
import schedule
import time
def morning_task():
print("Bom dia! Hora de fazer a tarefa matinal.")
def friday_task():
print("Sexta-feira chegou! Hora da tarefa de sexta-feira.")
# Tarefas matinais todos os dias às 7:30
schedule.every().day.at("07:30").do(morning_task)
# Tarefas de sexta-feira todas as sextas às 16:00
schedule.every().friday.at("16:00").do(friday_task)
while True:
schedule.run_pending()
time.sleep(1)
Dicas práticas e erros comuns
Quando se trata de automatizar tarefas com o schedule
, há alguns pontos importantes a serem lembrados.
Primeiro, lembre-se de que o schedule
executa tarefas na thread principal. Isso significa que, se sua
tarefa for longa ou puder bloquear a execução de outras tarefas, vale a pena considerar o uso de
multithreading ou chamadas assíncronas para as tarefas.
Segundo, se sua tarefa precisa ser executada em um horário estrito e isso é crítico, certifique-se de que seu
dispositivo está ligado e o script em execução. O schedule
não funcionará se o script estiver parado
ou o dispositivo desligado.
Por fim, a suposição mais comum — esperar que o schedule
possa compensar tarefas perdidas. Infelizmente, se
seu script não estava em execução quando a tarefa deveria ter sido executada, o schedule
não
executará a tarefa retroativamente.
GO TO FULL VERSION