2016-08-29 24 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値が出力されます。

関連する問題