Das nenn ich mal effiziente Kommunikation!
ein Antwort, die das Problem löst, in unter 9 Minuten
danke!
Es ging auch kurz, jetzt kommt aber
Error: 55000000002 Connection refused; access control limit exceeded
Ich möchte abfragen, ob eine (große) Liste von Domains schon registriert ist.
Dazu taugt dann die oben genannten Möglichkeit wohl nicht.
Ich habe diese weiteren Möglichkeiten gefunden:
Code: Alles auswählen
try:
socket.gethostbyname(url)
#anweisungen
except:
pass
Code: Alles auswählen
nsurl="nslookup "+url
nslookup=os.popen(nsurl).readlines()
if len(nslookup)>3:
#Anweisungen
Soll eine Liste mit URLs überprüft werden, von denen erwartet wird, dass sie überwiegend aktiv sind, dann hat gethostbyname deutlich die Nase vorn:
Pro URL braucht
gethostbyname ca 0,0005 Sekunden,
nslookup ca 0,1 Sekunden und
urllib ca 0,15 Sekunden.
Meine CPU-Auslastung (Dualcore 2 GHz) liegt währen dieser Operationen bei:
gethostbyname 60 %
nslookup 30 %
urllib 1%
Erstaunlich ist die im Vergleich hohe CPU-Auslastung von nslookup gegenüber urllib, obwohl beide etwa gleichlange brauchen.
Was macht nslookup, was urllib nicht macht?
Sollen jedoch Listen überprüft werden, in denen unregistrierte URLs überwiegen, liegt nslookup vorne:
gethostbyname braucht ca 0,3 Sekunden,
nslookup ca 0,2 Sekunden und
urllib ca 1 Sekunde.
Diese Zeiten schwanken natürlich stark, jenachdem wie die URLs aufgeteilt sind, aber es zeichnet sich in etwa dieser Trend ab.
Um mehr URLs pro Zeiteinheit überprüfen zu können, kann man auch die Listen in parallele Prozesse aufteilen, was jedoch auch Probleme nach sich zieht:
nslookup und gethostbyname erreichen CPU-bedingt schnell eine Grenze
urllib hat bei parallelen Prozessen hohe Ausfallquoten: bei 20 oder mehr Prozessen werden bei meiner 2-Mbit-Leitung nur noch unter 30 % aller registrierten URLs erkannt, der Rest wird Traffic-bedingt nicht erkannt. Diesen Effekt kann man durch heraufsetzen der setdefaulttimeout-Zeit abschwächen, was jedoch dann wieder in kleinerer Überprüfungsfrequenz resultiert.
Ein weiteres Problem ist, dass ich bei gethostbyname kein setdefaulttimeout implementieren kann.
Wenn jemand Gedanken zu diesen Problemen hat und vielleicht weitere Überprüfungsmethoden kennt, würde ich mich darüber sehr freuen.
Gruß
paul