1. Configurando uma tarefa simples
Vamos começar com um exemplo bem simples: como fazer o código nos lembrar diariamente de verificar os e-mails.
import schedule
import time
def job():
print("Lembrete: verifique seu e-mail!")
# Configurando a tarefa para rodar diariamente
schedule.every().day.at("09:00").do(job)
while True:
schedule.run_pending()
time.sleep(1)
Neste exemplo, a função job
será chamada todos os dias às 9 da manhã. A biblioteca schedule
verifica se há tarefas agendadas a cada 1 segundo usando run_pending()
. Não se esqueça de que o código precisa estar rodando continuamente para que a tarefa seja executada.
Notas para os hackers de plantão
Perceba que você pode usar every().hour
para executar uma tarefa a cada hora, ou every(2).hours
para executá-la a cada duas horas. As possibilidades são quase infinitas.
2. Lembretes em dias úteis
Agora vamos complicar um pouco a situação: suponha que você precise de um lembrete apenas nos dias úteis. Por exemplo, queremos receber o mesmo lembrete em todos os dias úteis.
import schedule
import time
def weekday_job():
print("Lembrete do trabalho: não se esqueça de preparar o relatório!")
schedule.every().monday.at("08:00").do(weekday_job)
schedule.every().tuesday.at("08:00").do(weekday_job)
schedule.every().wednesday.at("08:00").do(weekday_job)
schedule.every().thursday.at("08:00").do(weekday_job)
schedule.every().friday.at("08:00").do(weekday_job)
while True:
schedule.run_pending()
time.sleep(1)
Neste caso, às 8 da manhã de cada dia útil, você receberá um lembrete para preparar o relatório. Assim, seu script sempre estará alinhado com o cronograma, mesmo quando você se esquecer disso.
3. Configurando tarefas semanais
O que fazer se você quiser receber um lembrete todo domingo? Digamos que você queira verificar o estoque de café antes da semana de trabalho. Vamos ver como fazer isso:
import schedule
import time
def sunday_job():
print("Lembrete: verifique o estoque de café para a próxima semana!")
schedule.every().sunday.at("18:00").do(sunday_job)
while True:
schedule.run_pending()
time.sleep(1)
Este pequeno trecho de código trará um pouco mais de organização ao seu domingo, lembrando você de se preparar para a próxima semana. Agora, seu café nunca acabará em um momento inesperado. Sim, eu sei que isso pode ser uma tragédia para muitos.
4. Alterando tarefas
Remover tarefas do cronograma
Se você precisar cancelar a execução de uma tarefa, poderá usar o método cancel_job()
. Por exemplo, para remover uma tarefa do cronograma, você pode obter o objeto da tarefa e chamar cancel_job()
para ele.
job = schedule.every().day.at("09:00").do(daily_task)
schedule.cancel_job(job) # Removendo a tarefa do cronograma
Reagendar uma tarefa
Para alterar o horário de execução de uma tarefa, você pode usar uma reconfiguração. Por exemplo, se a tarefa estava marcada para às 9:00, mas agora precisa ser reagendada para às 10:00, podemos sobrescrever seu cronograma.
# Agendando uma tarefa para rodar diariamente às 9:00
job = schedule.every().day.at("09:00").do(my_task)
# Reagendando para às 10:00
job.clear() # Limpando o cronograma atual
job.at("10:00") # Atualizando o horário
Verificar tarefas ativas
Para verificar se há tarefas agendadas, você pode listar todas as tarefas ativas usando schedule.jobs
. Isso é útil quando você precisa obter informações sobre todas as tarefas agendadas.
# Adicionando algumas tarefas
schedule.every().day.at("09:00").do(my_task)
schedule.every().monday.at("10:00").do(my_task)
# Ver todas as tarefas ativas
for job in schedule.jobs:
print("Tarefa:", job)
Remover todas as tarefas do cronograma
Se você precisar limpar o cronograma e remover todas as tarefas agendadas, pode usar o método clear()
.
# Agendando algumas tarefas
schedule.every().day.at("09:00").do(my_task)
schedule.every().hour.do(my_task)
# Limpando o cronograma
schedule.clear()
Executar uma tarefa apenas uma vez
Às vezes, é necessário executar uma tarefa apenas uma vez em um horário específico. Após a execução da tarefa, você pode usar o método schedule.cancel_job(job)
para cancelá-la.
def one_time_task():
print("Tarefa executada apenas uma vez")
return schedule.CancelJob # Cancelando a tarefa após a execução
# Agendando a tarefa para rodar apenas uma vez
schedule.every().day.at("09:00").do(one_time_task)
while True:
schedule.run_pending()
time.sleep(1)
5. Cenários reais de uso
Agora vamos ser mais sérios: como essas automações são usadas em ambientes profissionais? Na vida real, você pode usar o agendamento de tarefas para:
- Realizar coleta de dados automaticamente todos os dias ou semanas.
- Criar e enviar relatórios em um dia e horário específicos.
- Monitorar o status do seu servidor ou interface web com notificações de erros.
- Executar backups regulares do banco de dados.
Erros comuns
Enquanto você trabalha com agendamento de tarefas, tome cuidado com problemas de sincronização de tempo, como se o seu servidor e computador local estiverem em fusos horários diferentes. Além disso, se seu script encerrar acidentalmente, a tarefa agendada não será executada. Use ferramentas de monitoramento, como cron (para sistemas Unix-like) ou o Agendador de Tarefas do Windows.
Se você esquecer de adicionar time.sleep(1)
no final do seu loop, terá um processo que consumirá o CPU sem parar, como um código hiperativo. Enfim, não se esqueça de manter seu script rodando corretamente.
GO TO FULL VERSION