Mon objectif est de construire un robot d'exploration distribué qui traite plus d'un site Web à la fois et plus d'une requête également. Pour cela, j'ai construit un robot d'indexation en Python en utilisant des paquets standards comme 'requests' et 'BeautifulSoup'. Ça fonctionne bien. Afin de le distribuer, j'ai utilisé rabbitMQ. Cela me permet de rendre le système plus rapide en ayant plus d'un processus aidant l'exploration.Calcul distribué en Python - Web crawler
Mon système fonctionne dans un modèle workpool:
- J'ai un serveur principal de recevoir les requêtes et le démarrage d'une nouvelle analyse pour chacun d'eux. Au démarrage de l'analyse, certaines URL sont collectées en entrant la requête dans un moteur de recherche.
- A partir de maintenant, le serveur principal envoie les URL aux processus/travailleurs disponibles avec rabbitMQ et attend de recevoir plus d'URL de leur part.
Cependant, j'ai un goulot d'étranglement énorme dans cette architecture, et ce n'est pas le serveur principal ... rabbitmq ne me permet pas de consommer plus de 1 message à la fois la fonction (channel.basic_qos() ne fonctionne pas travail!). Ce que je voulais était d'avoir une file d'attente privée pour chaque requête (comme je l'ai maintenant) et être capable de traiter ces 2 requêtes en même temps, aussi vite que possible. Par ce moyen, parallélisez le code des travailleurs afin qu'il puisse traiter le nombre maximum d'urls, au lieu de 1 url à la fois.
Que dois-je utiliser pour remplacer rabbitMQ ici? J'ai spécifiquement atteint les développeurs de rabbitMQ et je ne peux pas en faire ce que je veux, alors j'essaie de trouver un 'package de distribution' différent. peut-être Kafka?
Merci pour votre réponse. Le multitraitement est certainement une idée pour la parallélisation. Cependant, comme je l'ai dit, j'utilise rabbitmq pour rendre l'analyse distribuée (de nombreux ordinateurs/processus peuvent se joindre) et c'est ce qui me cause le goulot d'étranglement. – Skinishh