CodeGym /Cursos /Python SELF PT /Configuração de tarefas recorrentes (lembretes diários e ...

Configuração de tarefas recorrentes (lembretes diários e semanais)

Python SELF PT
Nível 40 , Lição 0
Disponível

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.

Python

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.

Python

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:

Python

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.

Python

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.

Python

# 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.

Python

# 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().

Python

# 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.

Python

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION