Python >> Tutoriel Python >  >> Python

Comment obtenir un Cron Like Scheduler en Python ?

Résumé : Pour obtenir un planificateur de type cron en Python, vous pouvez utiliser l'une des méthodes suivantes :

  1. Utilisez schedule modules
  2. Utilisez APScheduler
  3. Utilisez timeloop bibliothèque
  4. Utilisez CronTab modules

Cron (également appelé tâche cron) est un utilitaire logiciel qui aide un utilisateur à planifier des tâches dans des systèmes de type Unix. Les tâches dans cron sont présentes dans un fichier texte qui contient les commandes à exécuter pour qu'une tâche planifiée soit opérationnelle. Le nom de ce fichier est crontab. Pour en savoir plus sur le planificateur de maïs, vous pouvez vous référer à ce lien.

Dans cet article, nous nous concentrerons sur la manière dont nous pouvons tirer parti des fonctions d'un planificateur de type cron en Python pour gérer les tâches planifiées. Alors sans plus tarder, passons à notre question essentielle :

Problème : Compte tenu d'un travail planifié ; comment définir un cron comme planificateur pour le travail en utilisant Python ?

Exemple : Soit un fichier texte (test.txt ) et un script python (test.py ). Comment planifier une tâche en Python afin que le script Python puisse être exécuté à intervalles planifiés ?

Le script Python est le suivant :

from datetime import datetime

myFile = open('test.txt', 'a')
myFile.write('\nAccessed on ' + str(datetime.now()))
myFile.close()

Lors de l'exécution d'une certaine tâche planifiée en Python, la sortie souhaitée est :

Maintenant que nous avons un aperçu de notre énoncé de problème, passons aux solutions probables :

Méthode 1 :Utilisation de l'API de planification

schedule est un planificateur intégré au processus qui fournit une syntaxe très conviviale pour planifier des tâches à l'aide de Python. Certaines de ses fonctionnalités clés incluent :

  1. Compatible avec Python 2.7, 3.5 et 3.6.
  2. Syntaxe simple et API facile à utiliser.
  3. Léger.
  4. Aucune dépendance externe.

Depuis schedule ne fait pas partie de la bibliothèque Python standard, vous devez l'installer à l'aide de la commande suivante :

$ pip install schedule

Regardons le programme suivant pour voir comment nous pouvons utiliser le schedule module, pour planifier des tâches :

import schedule
import time
from os import system


def job():
    system('python test.py')


# schedule the job to run at intervals of 1 min
schedule.every(1).minutes.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

Sortie

Méthode 2 :Utilisation du planificateur Python avancé

Advanced Python Scheduler (APScheduler) est un planificateur de tâches léger et puissant qui nous aide à exécuter des tâches de routine. Les principales fonctionnalités de l'APScheduler sont :

  1. N'inclut pas les dépendances externes.
  2. Disponible et testé sur CPython 2.5 – 2.7, 3.2 – 3.3, Jython 2.5.3, PyPy 2.2
  3. Plusieurs magasins de tâches actifs simultanément :RAM, base de données simple basée sur des fichiers, SQLAlchemy, MongoDB, Redis.
  4. API thread-safe

Il fournit trois mécanismes configurables de base :

  • Planification de type Cron
  • Planification différée des tâches à exécution unique (comme la commande "at" UNIX)
  • Basé sur l'intervalle (exécuter une tâche à des intervalles de temps spécifiés)

Pour pouvoir utiliser APScheduler, le module apscheduler doit être installé car il ne fait pas partie de la bibliothèque Python standard. Utilisez la commande suivante pour l'installer :

$ pip install apscheduler

Le programme suivant montre comment nous pouvons utiliser l'APScheduler pour exécuter des tâches de type cron en Python (veuillez suivre les commentaires dans le code ci-dessous pour mieux comprendre le concept) :

import time
import os

from apscheduler.schedulers.background import BackgroundScheduler


def job():
    os.system('python test.py')


if __name__ == '__main__':
    # creating the BackgroundScheduler object
    scheduler = BackgroundScheduler()
    # setting the scheduled task
    scheduler.add_job(job, 'interval', minutes=1)
    # starting the scheduled task using the scheduler object
    scheduler.start()

    try:
        # To simulate application activity (which keeps the main thread alive).
        while True:
            time.sleep(1)
    except (KeyboardInterrupt, SystemExit):
        # Not strictly necessary but recommended
        scheduler.shutdown()

Sortie

Méthode 3 :Utilisation de la bibliothèque Timeloop

Une autre façon d'exécuter des tâches planifiées est la bibliothèque timeloop. Si vous recherchez quelque chose de simple pouvant être implémenté dans votre application Web ou autonome, Timeloop pourrait être un bon choix. Cependant, si vous avez l'intention de travailler avec des opérations complexes, cette bibliothèque n'est pas recommandée.

Utilisez la commande suivante pour installer le timeloop bibliothèque.

$ pip install timeloop

Examinons le code suivant pour comprendre comment timeloop fonctionne :

from os import system
import time
from timeloop import Timeloop
from datetime import timedelta

tl = Timeloop()


@tl.job(interval=timedelta(seconds=10))
def train_model():
    system('python test.py')


tl.start()

while True:
    try:
        time.sleep(1)
    except KeyboardInterrupt:
        tl.stop()
        break

Sortie

Méthode 4 :Utilisation du module Crontab

Le crontab utilise une API directe pour lire et écrire des fichiers crontab et accéder automatiquement au système cron. Crontab ne fait pas partie de la bibliothèque Python standard et doit être installé manuellement en utilisant le pip commande.

La syntaxe suivante peut être utilisée pour installer le module crontab dans votre système :

$ pip install python-crontab

Comprenons comment le module crontab fonctionne dans une approche étape par étape :

Étape 1  :Obtenir l'accès à Crontab

Il existe cinq façons d'accéder à la crontab à l'aide du module cron en Python. Parmi celles-ci, trois méthodes fonctionnent dans des environnements basés sur Unix et nécessitent les autorisations nécessaires, tandis que les deux autres méthodes fonctionnent également sous Windows.

Les méthodes spécifiques à Unix sont :

  1. cron =CronTab()
  2. cron =CronTab(utilisateur=Vrai)
  3. cron =CronTab(utilisateur='nom d'utilisateur')

Les deux autres méthodes qui fonctionnent également pour Windows sont :

  1. file_cron =CronTab(tabfile=’filename.tab’)
  2. mem_cron =CronTab(tab=”””* * * * * commande”””)

Étape 2 :Créer une nouvelle tâche

la création d'un nouveau travail est très simple et peut être effectuée à l'aide de la commande suivante :

job  = cron.new(command='/usr/bin/echo')

Étape 3 :Définition des restrictions de tâche

Le crontab Le module nous offre la possibilité de définir des restrictions de temps sur les travaux sans avoir à utiliser la syntaxe de cron.

Les restrictions de tâche peuvent être définies à l'aide des commandes suivantes :

# to run the job every minute
job.minute.every(1)
# to schedule hourly jobs
job.hour.every(4)
# to run jobs on certain days of week
job.dow.on('SUN', 'THU')
# to schedule tasks/jobs on specific months
job.month.during('APR', 'NOV')

Chaque restriction effacera la restriction précédente. Si vous souhaitez effacer toutes les restrictions de tâche, vous pouvez utiliser la commande :

job.clear()

Voyons maintenant les différentes options que nous pouvons utiliser dans le crontab module (Veuillez suivre les commentaires pour comprendre la signification de chaque commande) :

# enable a job:
job.enable()
# disable a job:
job.enable(False)
# to check if a task is enabled or disabled:
job.is_enabled()
# Chek whether a task is valid or not
job.is_valid()
# List all available cron jobs
for job in cron:
    print job
# Finding a cron job
cron.find_command("command") # Find according to command
cron.find_comment("comment") # Find according to comment
cron.find_time(time schedule) # Find according to time
# Removing a Job
cron.remove(job)
# Defining Environmental Variables
job.env['VARIABLE_NAME'] = 'Value'

Maintenant que nous avons un aperçu du crontab module et ses fonctionnalités, regardons le code suivant pour comprendre son fonctionnement :

from crontab import CronTab

cron = CronTab(user='finxter')

job = cron.new(command='python test.py')
job.minute.every(1)
cron.write()

Conclusion

Ainsi, dans cet article, nous avons appris diverses méthodes qui peuvent être utilisées pour obtenir un planificateur de type cron en Python. Il s'agissait de :

  1. Utiliser schedule
  2. Utiliser APScheduler
  3. Utiliser timeloop
  4. Utiliser crontab modules

J'espère que cet article vous a appris quelque chose et qu'il vous aidera dans votre parcours de codage. Veuillez rester à l'écoute pour des articles plus intéressants !