TP 7 : créateur et collecteur de fichiers

Contexte

Ce projet comporte deux programmes : un créateur de fichiers (dont un exemple est fourni dans dibbler.py), et un collecteur de fichiers (dont un exemple est fourni dans player.sh).


Le créateur de fichiers, lorsqu’il est lancé, crée un ensemble de répertoires et de fichiers. Les répertoires ont des noms aléatoires. Les fichiers, en revanche, ont des noms fixés à l’avance : leur nom est un numéro, commençant à 1, et s’incrémentant de 1 en 1. Ainsi, le 11è fichier s’appellera “11”, le 80è fichier s’appellera “80”, le 1500è fichier s’appellera “1500”.


Chaque fichier contient un code à 3 chiffres, généré aléatoirement, et a priori différent pour chaque fichier (deux fichiers peuvent contenir le même code, mais c’est alors une simple coïncidence).


Le collecteur de fichiers, lorsqu’il est lancé, parcourt les répertoires à la recherche du fichier nommé “1”. Une fois qu’il l’a trouvé, il affiche, sur la sortie standard, “1:XXX” (où XXX est le code à 3 chiffres contenu dans le fichier). Puis il recherche le fichier “2”, et une fois qu’il l’a trouvé, affiche “2:XXX”, et ainsi de suite.


Ces deux programmes modélisent, par exemple, la distribution d’un ensemble de tâches à effectuer dans un ordre précis, le créateur de fichiers jouant le rôle de l’ordonnanceur (qui distribue les tâches) et le collecteur de fichiers jouant le rôle de l’unité de traitement (qui exécute les tâches).


Programme créateur de fichiers


Un exemple de programme créateur est fourni dans le fichier dibbler.py. On demande d’effectuer les tâches suivantes :


  1. en examinant le code du programme, indiquer combien de fichiers vont être créés, et combien de répertoires ;

  2. vérifier en lançant le programme et en utilisant ensuite les commandes “find” et “wc” ;

  3. indiquer le temps d’exécution du programme (en considérant que la création d’un fichier ou d’un répertoire est instantanée) ;

  4. vérifier en lançant le programme en utilisant la commande “time” ;

  5. modifier le programme pour qu’il crée un fichier dibbler.out au début de son exécution, et qu’à chaque création de fichier, il ajoute une ligne dans dibbler.out, sous la forme <nom_du_fichier>:<code du fichier> ;

  6. faire une copie du programme, dibbler-fast.py, et modifier cette copie de façon à ce qu’elle crée les fichiers et les répertoires plus vite (sans les délais d’attente).

Programme collecteur de fichiers


Un exemple de programme collecteur est fourni dans le fichier player.sh.


On demande d’effectuer le travail suivant :


  1. après avoir créé une arborescence de fichiers et répertoires avec le dibbler.py étudié auparavant, lancer le programme collecteur pour vérifier son bon fonctionnement ;

  2. réécrire ce programme collecteur en Python ;

  3. effacer un fichier au hasard dans l’arborescence (par exemple le fichier “10”), et observer ce qui se passe ;

  4. modifier le programme collecteur (la version Python) pour qu’il ne reste pas bloqué si on efface un fichier au hasard ;

  5. modifier le programme collecteur pour qu’il n’effectue qu’une seule passe sur l’arborescence de fichiers et répertoires ;

  6. comparer les vitesses d’exécution du collecteur en Shell, du premier collecteur en Python, et du second collecteur en Pyhon (celui qui ne fait qu’un seul parcours).

Par la suite…


L’étape suivante sera de lancer en compétition plusieurs collecteurs, sachant que chacun est autorisé (ou pas, suivant les permissions Unix) à effacer/modifier les fichiers. Le but sera de collecter le plus possible de fichiers, tout en gênant les autres programmes le plus possible.