2016-08-29 48 views
0

我正在使用此腳本來解析數千個域。它成功運行,並在隊列爲空時結束。我正試圖打破這個循環並通過打印繼續執行腳本。隊列成功運行!在中斷之後退出而不是繼續

當隊列爲空時,如何獲得此代碼以打破循環,並進行打印?

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 !!") 

回答

0

你可以簡單地移動,做DNS查詢,並將結果打印到try/except塊體的代碼:

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 

現在,當隊列爲空一個queue.Empty會升起,異常處理程序將簡單地退出線程函數,否則它將打印出dns值。

相關問題