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
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? –
Comme cela ne fonctionne pas sur mon serveur, je préférerais faire cela sans avoir à installer des frameworks de tierce partie. – Tom
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