/ / Type de données pour le test d'adhésion dans un environnement multitraitement - python, objets partagés, multithreading python

Type de données pour le test d'adhésion dans un environnement multitraitement - python, objets partagés, multithreading python

Je travaille sur un robot Web et j'utilise le multitraitement pour télécharger et traiter quatre pages à la fois. Mais pour cause, je n'ai pas l'intention d'explorer la même page plus d'une fois.

Avant d’implémenter le multitraitement, j’utilisais Setspour conserver une collection d'URL chiffrées, j'ai choisi les ensembles, car ils sont idéaux pour les tests d'adhésion. Je pensais que le multitraitement.Manager pourrait m'aider à mettre en place un ensemble partagé entre les quatre processus. Mais cela ne semble pas être le cas.

Ce que je veux faire est quelque chose comme

manager = Manager()
d = manager.set()

Mais cette fonction n'existe pas dans la classe Manager.

Est-ce que quelqu'un a une idée de comment résoudre ou une solution à mon problème?

Réponses:

0 pour la réponse № 1

Soit vous utilisez list comme base de stockage des sites Web visités. 1) verrouiller 2) Vérifier si le tableau a une valeur 3) Ajouter l'URL si n'a pas été visité 4) Débloquer

Ou créez un autre processus où vous aurez un ensemble normal où vous pourrez mettre vos URL. Tous les processus qui doivent vérifier si le site Web a été visité ne font que parler à ce processus via Queue ou Pipe.


0 pour la réponse № 2

multiprocessing a une mise en œuvre de dict(), qui devrait être un remplacement fonctionnel à set() pour les tests d'adhésion.

Utilisez simplement les clés pour stocker les URL sur lesquelles vous souhaitez effectuer des recherches d’appartenance, puis stockez ce que vous souhaitez dans la valeur:

d = manager.dict()

# Store some values
d["http://dr.dk"] = 1
d["http://stackoverflow.com"] = 1

# Do membership lookup
if "http://stackoverflow.com" in d:
print "We have visited Stack Overflow"

if "http://google.com" not in d:
print "We have not visited Google"