2016-08-29 109 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值。

相关问题