Planifier des Tâches avec APScheduler
Si vous cherchez à exécuter dans vos codes python des taches de manières répétitives ou à des heures fixes (cron) la bibliothèque APScheduler, pour Advanced Python Scheduler, peut vous économiser beaucoup de lignes de code et de temps. En effet, il regorge de beaucoup de fonctionnalités, par exemple si votre planificateur est redémarré, il exécutera toutes les tâches qu’il aurait dû exécuter pendant qu’il était hors ligne.
APScheduler dispose de trois systèmes de planification intégrés qui peuvent être combiné :
- Planification de type crontab avec heures de début et de fin facultatives
- Exécution basée sur des intervalles exécute les travaux à intervalles réguliers, avec des heures de début / fin facultatives
- Exécution différée unique, exécute les travaux une fois, à une date / heure définie
En plus vous pouvez choisir le framework python gérant vos jobs :
- BlockingScheduler
- BackgroundScheduler
- AsyncIOScheduler
- GeventScheduler
- TornadoScheduler
- TwistedScheduler
- QtScheduler
Comment lancer des taches répétitives avec APScheduler
Un petit exemple de code :
Dans cet exemple qui utilise Blocking comme framework, je génère trois jobs :
- init qui est lancé une seule fois au démarrage de l’application
- scan qui se lance toutes les 90s avec une tolérance de 30s
- register qui se lance toutes les 60s avec une tolérance de 30s
À l’exécution on voit que le job
Vous remarquerez que le job register démarre alors que celui d’init n’est pas terminé et que celles de netscan se mélange. Si vous souhaitez que l’exécution de vos jobs ne se chevauchent pas, il suffit de limiter le nombre de thread. Cela se fait en changeant la ligne suivante :
en :
Désormais on voit que nos jobs register et scan fonctionnent de manières concurrentes et ne démarre qu’après celui d’init :
Le lancement du job register a été repoussé, car nous limitons le nombre de thread. Les jobs register et scan ont été également repoussé, car l’heure de programmation initiale a été dépassé alors que nous tolérions 30s de bonus.
Lors de la définition de votre scheduler il est possible de définir d’autres paramètres évitant à devoir les saisir de manière répétitive ensuite dans les jobs avec job_defaults:
Comment lancer des taches en parallèle
Imaginons que nous voulions lancer en // des scripts et d’attendre la fin de celles-ci. Nous allons utiliser les events pour gérer une liste de tâches. Une fois la liste de tache vide le programme s’arrête.
Je pense que vous avez plein d’idées en tête pour utiliser cette superbe libraire python dont voici le lien pour la documentation ↗. Amusez vous bien !