2010-06-25 5 views
1

Je suis novice en Python et en multithreading, alors s'il vous plaît, supportez-moi. J'écris un script pour traiter les domaines dans une liste via Web of Trust, un service qui classe les sites Web de 1-100 sur une échelle de «fiabilité» et les écrit dans un fichier CSV. Malheureusement, les serveurs de Web of Trust peuvent prendre un certain temps à répondre, et le traitement de 100 000 domaines peut prendre des heures. Mes tentatives de multithreading jusqu'ici ont été décevantes - en essayant de modifier le script de this answer a donné des erreurs de fil, je crois parce que quelques discussions ont été trop longues à résoudre.Comment améliorer les performances via Python multithread

Voici mon script non modifié. Quelqu'un peut-il m'aider à le multithread, ou me diriger vers une bonne ressource de multithreading? Merci d'avance.

import urllib 
import re 

text = open("top100k", "r") 
text = text.read() 
text = re.split("\n+", text) 

out = open('output.csv', 'w') 

for element in text: 
     try: 
       content = urllib.urlopen("http://api.mywot.com/0.4/public_query2?target=" + element) 
       content = content.read() 
       content = content[content.index('<application name="0" r="'):content.index('" c')] 
       content = element + "," + content[25] + content[26] + "\n" 
       out.write(content) 
     except: 
       pass 
+1

L'enfilage en Python est souvent un lavage sauf si vous travaillez autour du GIL (par exemple, écrire une extension Python C); dans le cas ci-dessus, cela peut fonctionner en raison du temps passé dans les blocs d'E/S ... de toute façon, avez-vous envisagé d'utiliser un framework d'événement (single-threaded) comme twisted à la place? –

+0

Comme cela ne fonctionne pas sur mon serveur, je préférerais faire cela sans avoir à installer des frameworks de tierce partie. – Tom

+1

Comme on pouvait s'y attendre, WOT n'aime pas copier sa base de données de cette façon, et peut donc commencer à bloquer vos requêtes (http://www.mywot.com/pl/terms/api) ... devrait utiliser leur service commercial? – mbq

Répondre

1

Une analyse rapide grâce à la documentation de l'API WOT montre que, ainsi que la demande de public_query2 que vous utilisez, il y a une demande de public_query_json qui vous permet d'obtenir les données par lots jusqu'à 100. Je suggère d'utiliser avant de commencer à inonder leur serveur avec beaucoup de demandes en parallèle.

+0

Merci pour la réponse. – Tom

Questions connexes