2016-08-29 3 views
0

Ich benutze dieses Skript, um Tausende von Domains aufzulösen. Es wird erfolgreich ausgeführt und endet, wenn die Warteschlange leer ist. Ich versuche es aus der Schleife auszubrechen und das Script durch Drucken fortzusetzen.Warteschlange wird erfolgreich ausgeführt! Exits statt fortfahren, nach Break

Wie bekomme ich diesen Code, um aus der Schleife auszubrechen, und drucken, wenn die Warteschlange leer ist?

q = queue.Queue() 
for name in names: 
    q.put(name) 

def async_dns(): 
    s = adns.init() 

    while True: 
     try: 
      dname = q.get(False) 
      q.task_done() 
     except queue.Empty: 
      return 
     response = s.synchronous(dname,adns.rr.NS)[0] 
     if response == 0: 
      dot_net.append("Y") 
      print(dname + ", is Y") 
     elif response == 300 or response == 30 or response == 60: 
      dot_net.append("N") 
      print(dname + ", is N") 


threads = [] 
for i in range(20): 
    t = threading.Thread(target=async_dns) 
    threads.append(t) 
    t.start() 


    print("Done !!") 

Antwort

0

Sie einfach den Code bewegen konnte, dass der DNS-Lookup tut und druckt das Ergebnis in den Körper des try/except Block:

def async_dns(): 
    s = adns.init() 

    while True: 
     try: 
      dname = q.get(False) 

      response = s.synchronous(dname,adns.rr.NS)[0] 
      if response == 0: 
       dot_net.append("Y") 
       print(dname + ", is Y") 
      elif response == 300 or response == 30 or response == 60: 
       dot_net.append("N") 
       print(dname + ", is N") 

      q.task_done() 
     except queue.Empty: 
      return 

Nun, wenn die Warteschlange ein queue.Empty leer angehoben wird und die Ausnahmebehandler beendet einfach die Thread-Funktion, andernfalls werden die DNS-Werte ausgedruckt.

Verwandte Themen