17.12.2012 Views

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

Programmation PYTHON - Zenk - Security - Repository

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Discussion<br />

Exercices corrigés<br />

CHAPITRE 11<br />

Ajouté à la version 2.6, le module multiprocessing gère les processus aussi souplement<br />

que des threads. Les API disponibles sont équivalentes aux API du module<br />

threading. En outre, multiprocessing propose une classe Pool qui gère automatiquement<br />

les processus et les tâches à réaliser.<br />

Dans la fonction launch_work, une instance de Pool est créée et chaque URL à<br />

traiter est passée à cette classe avec la requête de recherche.<br />

Le travail consiste ensuite à programmer la fonction qui traite l’URL de manière<br />

isolée sans se soucier de l’aspect multiprocessus. Une fois l’instance de classe Pool<br />

remplie, chaque tâche est exécutée par l’appel get.<br />

processed_url est un dictionnaire partagé entre les différents processus, qui liste les<br />

URL déjà traitées, de manière à ne pas repasser par les mêmes pages.<br />

La suite est une programmation classique, où les pages sont lues avec<br />

urlllib2.urlopen et les logs émis avec logging. La lecture des pages n’est pas<br />

décrite ici, car cette fonctionnalité est détaillée dans l’exercice 12.<br />

Extension<br />

La programmation parallèle est utile lors qu’un programme manipule des ressources<br />

distantes, comme des pages web. Mais si ce modèle accélère grandement les traitements,<br />

pour un volume conséquent de données, il atteint ses limites car il n’est pas<br />

possible de lancer une quantité infinie de processus sur la même machine.<br />

Le fait d’isoler le travail de recherche dans une fonction unique permet assez facilement<br />

de passer à des modèles distribués plus robustes. Le programme ci-avant peut<br />

par exemple évoluer vers un programme qui s’exécute en parallèle sur plusieurs<br />

machines (appelés nœuds). Dans ce modèle, le pool devient le nœud maître, et<br />

l’ensemble est appelé cluster. Le nœud maître envoie des travaux indépendants à<br />

chaque nœud du cluster et récupère les résultats.<br />

L’algorithme le plus célèbre de modèle distribué de ce type est MapReduce (http://<br />

fr.wikipedia.org/wiki/MapReduce) de Google. Côté implémentation, la plus célèbre est<br />

Hadoop en Java. Notons que quelques implémentations existent en Python, comme<br />

Disco (http://discoproject.org/).<br />

371

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!