Développer une libraire en Python pour automatiser la parallélisation maximale de systèmes de tâches. L’utilisateur doit pouvoir spécifier des tâches quelconques, interagissant à travers un ensemble arbitraire de variables, et pouvoir :
- obtenir le système de tâches de parallélisme maximal réunissant les tâches en entrées.
- exécuter le système de tâches de façon séquentielle, tout en respectant les contraintes de précédence.
- exécuter le système de tâches en parallèle, tout en respectant les contraintes de précédence.
File | Description | |
---|---|---|
01 | TaskClass.py | La class Task permet la création de tâches. |
02 | TaskSystemClass.py | Le fichier TaskSystemClass.py regroupe l'ensemble des méthodes qui vont être exécutés pour réaliser le parallélisme maximal. |
03 | Test.py | Le fichier test.py permet de tester les différentes fonctionnalitées que propose la librairie de parallélisation maximale. |
04 | Bonus.py | contient le code python pour réaliser la partie bonus du projet. |
🔄 La librairie GraphViz: https://graphviz.org/
🔄 La librairie NetworkX
$ pip install networkx
🔄 La librairie Matplotlib
python -m pip install -U pip
python -m pip install -U matplotlib
Méthodes | Description | Paramètres |
---|---|---|
getDependencies('TaskName') | Nom d'une tâche | Elle permet de retourner la liste des tâches précédentes à la tâche en paramètre. |
runSeq() | None | Elle permet de faire une exécution séquentielle des tâches à partir d'une tâche définie. Elle utilise la méthode topological_sort() pour gérer l'ordonancement des tâches. |
run_par() | None | permet l'exécution parallèle des tâches en tenant compte du parallélisme maximal des tâches. |
verifier_entrees() | None | Elle prend en paramètre la liste des tâches et les contraintes de précédence sur le système de tâches. Cette méthode sera utilisée pour vérifier:l'unicité des noms des tâches dans le système,vérifier si toutes les tâches citées dans les contraintes sont bien existentes,vérifier si toutes les tâches ont une tâche précédente,Vérifier si le système des tâches est déterminé c-à-d: pour toute tâche t1, t2 du système il n'y a pas d'interférence. |
draw() | None | Cette méthode permet de tracer le graphe d'éxécution des tâches. Nous utilisons la librairie graphviz et aussi la librairie matplotlib qui fourni un certain nombre de fonctions pour faire les représentations graphiques de notre système de tâches. |
detTestRnd() | None | Cette méthode permet de montrer si le système est déterminimé. |
L'exécution et les tests de la librairie se font dans le fichier test.py.
⚡1. Création de 5 tâches t1, t2, t3, t4, t5:
⚡2. Créer un système de tâches:
⚡3. Vérification des contraintes sur le système des tâches
😄Output
- Les tâches sont uniques
- Tous les noms des tâches existent
- Le système des tâches est déterminé
⚡4. Application de la fonction getDependencies():
😄Output
- ['T2', 'T3']
😄Output:
- Finished task T1
- Starting task T2
- Finished task T2
- Starting task T3
- Finished task T3 Starting task T4
- Finished task T4
- Starting task T5
- Finished task T5
⚡6. Exécution de la méthode run_par()
😄 Output:
- Starting task T1
- Finished task T1
- Starting task T2
- Finished task T2
- Starting task T3
- Finished task T3
- Starting task T4
- Finished task T4
- Starting task T5
- Finished task T5
⚡7. Exécution de la fonction de draw_no()
⚡8. Exécution de la fonction de draw_no()
⚡9. Test Randomisé de déterminisme
😄 Output
- Finished task T4
- Starting task T5
- Finished task T5
- Starting task T1
- Starting task T2
- Starting task T3
- Starting task T4
- Starting task T5
- Finished task T5
- Finished task T3
- Finished task T4
- Starting task T3
- Finished task T3
- Starting task T4
- Finished task T4
- Starting task T5
- Finished task T5
- Starting task T1
- Starting task T2
- Starting task T3
- Starting task T4
- Starting task T5
- Finished task T3
- Finished task T5
- Finished task T4
- Finished task T1
- Finished task T2
- Temps d'exécution moyen en séquentiel : 9.04371 secondes
- Temps d'exécution moyen en parallèle : 9.04117 secondes
- La différence de temps d'exécution est de : 0.00253 secondes
⚡11. Bonus
NB: Une exécution du graphe 3 du TD. Après avoir appliqué les différentes méthodes de la librairie sur les systèmes S2 et S3 créés grâce aux graphes du TD, on peut déduire que le programme a bien pris en compte les nouveaux systèmes.
Les tests des méthodes runSeq() et run() génèrent des erreurs ce qui prouvent que les graphes 2 et 3 ne sont pas exprimables en terme d'opérations de composition parallèle et séquentielle.