Planification "lissée"

J’ai un soucis de programmation (au sens de planification) :
Pas moyen de trouver de la documentation (ni même un algorithme) pour lisser dans le temps la planification de tâches à exécuter.

Contexte / Scénario :
L’outil permet de gérer et d’exécuter des tâches de manière périodiques.
Les périodicités possibles sont :

  • Toutes les heures
  • Tous les jours
  • Toutes les semaines
  • Tous les mois
    Après cela, un script va se charger d’exécuter ce qu’il faut exécuter (si le moment est le bon).

L’utilisateur créer et rajoute une tâche, il veut qu’elle soit exécutée toutes les semaines (se fiche donc du jour de la semaine, de l’heure et de la minute d’exécution exacte)
Un autre utilisateur peut rajouter une tâche pour qu’elle s’exécute tous les mois (se fiche donc du jour du mois, du jour de la semaine, de l’heure et de la minute d’exécution exacte)

Comment faire pour la planifier au bon endroit en lissant le moment d’exécution de façon à ce que le nombre total de tâche à faire soit à peu près constante le long de la journée (pour chaque heure) et le long de la semaine (pour chaque jour) et le long du mois ?

Le but est d’éviter une surcharge de travail pour l’exécution des tâches à certaines périodes et des trous à d’autres.

Je pense que le sujet a déjà dû être abordé quelque part non ?

Je ne connais pas toute la théorie sur le sujet, mais perso j’aurai réparti les tâches en fonction de leur périodicité croissante :

  • D’abord placer toutes les tâches qui s’exécutent toutes les heures
  • Puis répartir uniformément les tâches journalières dans les trous
  • Puis répartir les tâches hebdomadaires dans les trous
  • etc…

A voir en pratique si ça donne une répartition convaincante :slight_smile:
Edité le 12/05/2010 à 19:28

J’avais envisagé cette possibilité, mais je me suis rendu compte d’un problème avec le concept de mois et de semaines.

En plaçant une tâche un Mardi, on est obligé de la placer un jour du mois qui corresponde bien à un Mardi (disons le 18).
Mais le mois d’après : le 18 ne sera pas forcément un Mardi :S

Effectivement. Dans ce cas, soit tu refais la planification chaque mois (mais je suppose que tu veux que les tâches mensuelles s’exécutent toujours le même jour), soit tu réserves une plage horaire pour les tâches mensuelles et une autre pour les tâches hebdomadaires…

Malheureusement oui : les tâches mensuelles/hebdomadaires doivent s’exécuter toujours le même jour (à ±12h) :frowning:

Ton idée est intéressante : on peut imaginer réserver la nuit aux tâches quotidienne (pour que leur résultats soient analysés dans la journée par les intéressés) et une partie de la journée aux tâches hebdomadaires et une autre aux tâches mensuelles.
Après faut voir quelles proportions de la journée est à réserver à chaque type de tâches.